在Windows上打印长双

时间:2015-03-08 14:56:45

标签: c++ visual-studio-2010 long-double

我使用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

     

res的双倍值: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 long double:0

在Microsoft Windows上是否没有正确打印长双精度值的方法(包括低级方法)?也许我可以检索并打印单独的有效数和指数?

UPD:

我写了一个例子,看看是否用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;

输出:

  

COUNT LONG DOUBLE:52

     

COUNT DOUBLE:52

这意味着使用double而不是long double完成工作(虽然设置了/Qlong_double标志)。有什么想法?

0 个答案:

没有答案