【发布时间】:2015-04-30 20:21:17
【问题描述】:
我需要处理非常大的矩阵和/或大量数字,但我不知道为什么 双倍结果 = 2251.000000 * 9488.000000 + 7887.000000 * 8397.000000; 给了我正确的输出 87584627.000000。 与 int 结果相同。
但是,如果我使用 float result = 2251.000000f + ... 等, 它给了我 87584624.000000 我不知道为什么!
谁能告诉我我错过了什么?
【问题讨论】:
-
浮点数只有 23 位精度(在大多数平台上)。
-
例如,vaughns-1-pagers.com/computer/powers-of-2.htm 显示的精度将略高于 6 位十进制数字,而问题中的总和为 8 位。
-
这些不是很大的数字——你在 double 和 float 都可以表示的范围内。你说的是精度。有很多方法可以根据需要获得尽可能高的精度,但在去那里之前,您需要了解您是否真的存在精度不足的问题,或者您只是认为自己有。
-
浮点数通过否定证明(你最喜欢的神/神)的存在,因为它们显然是(你最喜欢的邪恶拟人化)。分享和享受。
-
浮点数没有 23 个二进制精度,它有 24 个(其中一个是隐式的)。这意味着可以表示的最大整数是 2^24 或 16777216(7 位以上)。下一个(较高的)整数是 24^2+2 或 16777218。上一个(较低的)整数
标签: c matrix floating-point double gpu