2013-11-23 161 views
-2

是否将乘以两个双精度值 - > -329.0000 * 0.000000的计算给出结果-0.000000的32位和0.000000的64位?对32位和64位操作系统的不同计算

+1

它*应*返回相同的值,[按照IEEE-754规则](http://en.wikipedia.org/wiki/IEEE_floating_point) - 假设环境工作如此。单个(32位)和双(64位)浮点类型通常都存在于[非嵌入] 32位和64位环境中。 – user2864740

+2

我只是试过了,两者都得到了相同的结果。如果您尝试过并得到不同的结果,请使用该信息更新您的问题。如果你还没有尝试过,为什么不呢? –

+2

你已经多次提出了这个问题,并且从我所看到的中得到了一些很好的答案和建议,解释了浮点算法是如何工作的。我仍然无能为力,究竟是什么激发了你的问题,或者以前的答案如何回答你的问题。 –

回答

3

您已经在前面四个问题中询问了此问题背后的问题,并且您已被告知您所看到的原因是您的负值不是零(或负值为零),而是由于用于显示它的格式规格,因此显示为“-0.000000”。该值比-0.0000005更小(接近于零),因此它四舍五入为全0的显示显示不是实际值

%g指定符打印值,您将看到它不是零。

+0

'-329.0000 * 0.000000'的结果不是一些小的非零值。在数学上,它恰好为零。在IEEE算术中,结果为负零;用'%g'打印显示“-0”,并且它等于“0.0”。 (如果OP提供了实际的代码,这将更清楚。) –

+0

@KeithThompson:从OP的其他问题可以看出,它们不是**乘以0.000000的-329.0000。它们有一些'double'对象,它包含一个非零的非常小的值,但由于格式化而显示为“0.000000”,这导致它们错误地认为它是0.同样,乘以这个微小值的乘积 - 329是一个微小的负值,显示为“-0.000000”,但实际上并不为零。 OP的其他两个问题显示了一个分支,表示该值不为零(包括负值为零)。 –

相关问题