我正在使用C进行Nelder-Mead优化例程,该例程涉及取两个float的平均值。在极少数(但完全可重现)的情况下,两个floatx的区别仅在于它们的有效位的最低有效位不同。当取平均值时,舍入误差意味着结果将是yx

我想指定的是,四舍五入应始终朝第二个y进行。也就是说,我不能简单地指定舍入应朝零或无穷大,因为我事先不知道float是否会大于x

(我怎样才能做到这一点?

最佳答案

我认为没有硬件舍入模式。您必须编写自己的函数,然后,

double average(double x, double y) {
    double a = 0.5*(x+y);
    return (a == x) ? y : a;
}

关于c - 我该如何指定将两个有效位的平均值相差多少的最小浮点数在哪个方向上取整?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8913164/

10-12 17:54
查看更多