gpt4 book ai didi

c - 地板浮点模数

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:14 25 4
gpt4 key购买 nike

我想创建一个类模函数,它可以使用 double 精度浮​​点数而不是 int。另一个重要因素是函数必须向负无穷大而不是零舍入。

我有几个有效的方法,但我认为它们对于将在循环中多次调用的函数来说很慢:

// A suggested method
double reduce_range(double x, const double max) {
x /= max; // Normalize to [0,1)
x -= (int) x;
x += 1.0;
x -= (int) x;
return x * max; // Denormalize
}

// My own simple implementation
double reduce_range(const double x, const double max) {
return x - floor(x / max) * max;
}

两者似乎都有效,但第二个使用 floor(这似乎是这类事情的瓶颈),第一个重复转换为 int 和减法。有没有更快的方法来执行此操作(或允许编译器处理它)?

或者,这个怎么样:

double reduce_range(double x, const double max) {
x = fmod(x, max);
if(x < 0) x += max;
return x;
}

分支 if 会大大降低速度吗?


编辑:一些示例输入和输出:

(5.0, 7.0) >> 5.0
(8.5, 7.0) >> 1.5
(-2.3, 7.0) >> 4.7

最佳答案

如果您担心分支,那么如果将整数加载到 fpu 中更便宜的话,这可能会更好:

x += max * (x < 0);

关于c - 地板浮点模数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com