如何为浮点数指定舍入模式?

She*_*ter 3 floating-point rounding rust

我想将浮点数舍入到最接近的整数,当"最接近的整数"存在平局时,朝向正无穷大.

use std::num::Float;

fn main() {
    assert_eq!(-0.0, (-0.5).round()); // fails!
}
Run Code Online (Sandbox Code Playgroud)

但是,文档round说:

圆形中途情况远离0.0.

我没有看到任何可以让我改变舍入模式的东西,但是必须有某种方式,对吧?

DK.*_*DK. 6

看来,实施Float::round,至少对于f32f64,前进到roundf32/ roundf64instrinsics,这本身使用LLVM实现的功能llvm.round.f32llvm.round.f64.遗憾的是,文档llvm.round.*没有说明如何控制舍入模式.LLVM引用中似乎没有任何其他内容.我能找到的其他函数甚至提到了舍入模式要么指定了一个特定的舍入模式,要么说它是未定义的.

我找不到任何关于此的可靠信息.从2011年开始,LLVM邮件列表上一篇关于特定于x86的内在函数的帖子,以及2013年发布到Native Client问题跟踪器的帖子,该帖子似乎谈论了一个假设的内在函数以及如何轻松地进行移植.

盲目地抓住它:我会尝试编写一个小C库,然后链接到它.它似乎不是LLVM中直接支持的.