我使用 Microsoft Visual Studio 2010 和 Intel C++ Compiler XE 14.0。项目配置为“x64”。我需要使用long double
数据类型。我添加了一个编译选项/Qlong_double
并编写了一个测试示例:
long double ld = 2;
long double res = std::sqrt(ld);
printf("long double size: %i, value: %Lf", sizeof(res), res);
printf("double value of res: %f", (double)res);
输出:
长双尺寸:16,值:0,000000
资源的双倍值:1,414214
我发现问题在于 Windows 的标准 C 库不支持 long double。尝试使用 MPFR:
long double ld = 2;
long double res = std::sqrt(ld);
mpfr_t test;
mpfr_init2(test, 100);
mpfr_set_ld(test, res, GMP_RNDN);
mpfr_printf("\nmpfr long double: %Rf\n", test);
输出:
mpfr 长双:0
是否没有在 Microsoft Windows 上正确打印长双精度值的方法(包括低级方法)?也许我可以检索和打印单独的有效数字和指数?
升级版:
我写了一个例子来看看计算是否用 long double 执行:
int count = 0;
long double e = static_cast<long double>(1.0);
while (static_cast<long double>(1.0) + e / static_cast<long double>(2.0) > static_cast<long double>(1.0)){
e /= static_cast<long double>(2.0);
count++;
}
cout<< endl<< "COUNT LONG DOUBLE: " << count<<endl;
double de = 1.0;
count = 0;
while (1.0 + de / 2.0 > 1.0){
de /= 2.0;
count++;
}
cout<< endl<< "COUNT DOUBLE: " << count<<endl;
输出:
计数长双:52
双数:52
这意味着工作是使用 double 而不是 long double 完成的(尽管/Qlong_double
设置了标志)。有哪些想法?