Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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_Floating Point_Double_Printf - Fatal编程技术网

C 双精度打印输出不正确

C 双精度打印输出不正确,c,floating-point,double,printf,C,Floating Point,Double,Printf,我用CPU和GPU计算两个数字。它们都是双精度浮点数。 当我使用printf打印它们时,我得到: CPU=11220648352037704534577864266910298593595406193008158076631751727790009102214012225556499863999825039525639767460911091800702910643896210872459798230329601182926117099298535084878987264.00000 GPU=-

我用CPU和GPU计算两个数字。它们都是双精度浮点数。 当我使用printf打印它们时,我得到:

CPU=11220648352037704534577864266910298593595406193008158076631751727790009102214012225556499863999825039525639767460911091800702910643896210872459798230329601182926117099298535084878987264.00000 GPU=-4.65287
使用:

void print(const double *data1, const double *data2) {
    ...
    printf("CPU=%.5f\tGPU=%.5f\n", data1[k], data2[k]);
}
这是我所期望的许多数字。为什么我会得到这个?内存是否溢出、下溢、损坏?请帮忙


谢谢。

您使用的是printf格式
%.5f
。这意味着“打印简单的十进制数字,一直打印到小数点后的五位。”如果您想要使用科学记数法,这在如此大的数字中更常见,您应该使用
%.5g
,这意味着“打印自动格式数字,一直打印到小数点后五位……或者科学记数法中的四位。”


请注意,您拥有的如此巨大的数字肯定在
双精度
的范围内。您发布的代码中的数字值没有任何异常。

您能告诉我们什么是
k
?您确定已初始化
data1[k]
?它们是
long double
?@Streppel
k
是数组的整数索引,绝对在范围内。它们不是
long double
,是的,它们肯定已初始化。1.1e+184在double的有效范围内。任何可能导致此值的因素都有。谢谢,这不是我的问题。我想知道这个数字与GPU相同,有什么问题吗?同样,对于一个双精度数字来说,数字不是太多了吗?@user1096294 TBH,答案和你问的一样。现在你在问另一个问题。你从来没有说过数字应该是相同的。是的,正如解释的那样,它们只是可能是相同的在14或15个重要的位置之后,你并不是完全精确的。@ USER 1096244:那么你没有给我们任何关于这个问题的信息。你可以考虑如果我们在这里告诉你的东西教给你一些新的东西,那么就接受这个问题的答案,并用你的实际问题开始一个新的问题。t code来重现为什么结果不匹配的问题。我们现在无法知道。A
double
大约有15位精度,但是你可以用任意多的数字打印出来!正确的处理方法是删除它,而不是接受答案。这只是网站上的噪音。