为什么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/),但最好先搜索该错误存储库。

09-10 19:57