Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误的结果_C_Sqrt_Math.h - Fatal编程技术网

C 错误的结果

C 错误的结果,c,sqrt,math.h,C,Sqrt,Math.h,我很难理解为什么下面的代码段计算信息是错误的: result = sqrt(5/8 + sqrt(5)/8); printf("Result is %1.15Lf\n", result); 我试着先把一部分分开计算,然后再把另一部分分开计算,但仍然有相同的问题 它给了我: Result is 0.528685631720282 当我用WolframAlpha检查结果时,它大约是0.9510565。运行此代码,您将得到正确的结果: long double result = sqrt(5.0/8

我很难理解为什么下面的代码段计算信息是错误的:

result = sqrt(5/8 + sqrt(5)/8);
printf("Result is %1.15Lf\n", result);
我试着先把一部分分开计算,然后再把另一部分分开计算,但仍然有相同的问题

它给了我:

Result is 0.528685631720282

当我用WolframAlpha检查结果时,它大约是0.9510565。

运行此代码,您将得到正确的结果:

long double result = sqrt(5.0/8.0 + sqrt(5.0)/8.0);
printf("Result is %1.15Lf\n", result);
函数中的所有数字都是整数,我不知道程序中结果的数据类型,但它也应该是与预期结果相同的类型


正如您提到的,您刚刚开始学习C。请阅读有关数据类型在除法、乘法等方面的重要性。

注意printf%d,4/8;打印0和printf%f,4.0/8.0打印0.5。sqrt返回double,将结果转换为.long double没有意义。如果您想在长双精度中求平方根,请使用sqrtl。在printf中,它已经被定义为长双精度输出。考虑到这是用户想要的,我没有改变它。但用户也没有定义有问题的结果的数据类型,所以我也必须明确它不能是int