Как скомпилировать "ffast-math"?

Я пытаюсь проверить некоторый код 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' тоже не работали. Какой флаг я должен использовать?

Ответ 1

Вы всегда можете использовать rustc --emit llvm-ir и скомпилировать LLVM IR с нужными настройками.

Ответ 2

Проблема ржавчины # 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, которая выбрала это, однако!