Ответ 1
Вы всегда можете использовать rustc --emit llvm-ir
и скомпилировать LLVM IR с нужными настройками.
Я пытаюсь проверить некоторый код Rust, но я не могу понять, как установить параметр "ffast-math".
% rustc -C opt-level=3 -C llvm-args='-enable-unsafe-fp-math' unrolled.rs
rustc: Unknown command line argument '-enable-unsafe-fp-math'. Try: 'rustc -help'
rustc: Did you mean '-enable-load-pre'?
llvm-args='-ffast-math'
и llvm-args='-fast'
тоже не работали. Какой флаг я должен использовать?
Вы всегда можете использовать rustc --emit llvm-ir
и скомпилировать LLVM IR с нужными настройками.
Проблема ржавчины # 21690 говорит о добавлении неточных операций с плавающей запятой. Связанным с этим вопросом является добавление свойств, которые позволяют вам выбирать более свободные правила на основе за операцию. Например, fadd_fast
:
pub unsafe extern "rust-intrinsic" fn fadd_fast<T>(a: T, b: T) -> T
Использование intrinsics требует ночного компилятора и небезопасного кода:
#![feature(core_intrinsics)]
use std::intrinsics::fadd_fast;
fn main() {
let result = unsafe { fadd_fast(42.0, 31.0) };
println!("{}", result);
}
В конечном счете, это гораздо лучший дизайн, чем решение "все или ничего" флага командной строки. Кто знает, есть ли расчет с плавающей запятой, который критичен, чтобы не использовать быструю математику, зарытую глубоко в вашу программу? Это не поможет вам при попытке сравнить с программой на C, которая выбрала это, однако!