使用'/'加长双?

Sha*_*ane 6 c precision double

我试图理解为什么在以下方式中使用带有long double的'/'会导致0.000000值,而使用double的相同代码则不会

double d = (double)total_results / (double)total_points;
Run Code Online (Sandbox Code Playgroud)

给出值0.785403但是

long double d = (long double)total_results / (long double)total_points;
Run Code Online (Sandbox Code Playgroud)

给出值0.000000.我想为'total_results/total_points'获取最准确的值

编辑:最后错误只是我使用'%f'而不是'%Lf'输出它

之前

printf("Running on %d thread(s), results is %f.\n", NUM_THREADS, d);    
Run Code Online (Sandbox Code Playgroud)

printf("Running on %d thread(s), results is %Lf.\n", NUM_THREADS, d); 
Run Code Online (Sandbox Code Playgroud)

Ern*_*ill 15

这显然只是猜测,但你如何输出结果呢?如果您使用printf错误的字段说明符,则打印错误的零肯定是可能的结果.使用g ++,我尝试了"%lf",得到"-2.0000",当我应该得到"0.75".正确的说明符是"%Lf",有一个大写字母L.

  • @MrLister因为'%llf`可用于打印`long double`s'的标准没有规定,标准指定`L`修饰符,所以其他任何东西都可以在某些编译器上工作但不可移植. (3认同)