【发布时间】:2017-04-05 20:25:35
【问题描述】:
#include <stdio.h>
#include <math.h>
int main () {
float a = 0.0, b = -0.0;
printf("fmax(%f, %f) = %f\n", a, b, fmax(a, b));
}
我得到以下结果:
gcc f.c -o f -lm
./f
fmax(0.000000, -0.000000) = -0.000000
fmax 手册页中没有记录这种(错误)行为。有没有合理的解释?是否有一个干净(简洁)的解决方法?另外,如果两者都是-0.0,我希望得到-0.0作为最大值。
【问题讨论】:
-
无法使用 gcc 4.9.4 进行复制。我得到 0.000000。您是否尝试过交换
a和b值?交换值给了我-0.0000000BTW。 -
在 gcc 5.4.0 上也没有复制。
-
+0 和 -0 在 IEEE-754 中比较相等,所以这个实现可能只是选择一个任意参数作为其输出。
-
我使用的是 gcc 5.4.0(64 位)。
-
MSVC 报告
0.000000无论如何。
标签: c math floating-point