为什么cbrt()函数的这两个返回值不同?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
double nb = 56623104;
double v1 = cbrt(nb);
printf("v1 -> %.15f\n",v1);
double v2 = cbrt((double) 56623104);
printf("v2 -> %.15f\n",v2);
}
编译:
结果:
最佳答案
恭喜,这是一个编译器错误。编译器通过提前评估cbrt
调用之一来优化代码,很不幸,编译器的cbrt
版本与libm中的版本不同。您还将注意到,传递-O2
也会导致v2
结果也“错误”(即使在数学上正确)。
我已验证系统中存在该错误
该错误应报告给编译器开发人员(https://gcc.gnu.org/bugs/),但最好先搜索该错误存储库。