0

我目前正在研究在 CUDA 上使用浮点数而不是整数进行算术运算。由于整数运算与浮点运算相比非常慢,因此出现了必要性,因此在使用浮点数而不是整数时可能会提高性能。

我做了一个小实验并编写了一个简单的程序,该程序只是循环并将 1.0f 添加到变量中。结果表明,这可以达到 16777216.0f ..再向数字添加 1.0f 将使数字保持不变.. . 所以我想知道这个数字是最大数字,就运算符 +,-,* 而言,仅涉及整数将导致准确的整数结果,比如 +/-0.0001 精度?

问候丹尼尔

4

1 回答 1

2

Jonathan Dursi 在他的评论中指出了一些重要的链接来解释浮点。

如果你看,你会注意到 16777216 是 2^24。浮点(单精度)有 23 位加上隐含的“1”(因为值是标准化的)。使用 24 位,您将能够表示从 1.0 * 2^0 到 1.11..11b * 2^23 的任何整数(实际上您也可以得到负数,因为符号位是分开的,并且使用特殊编码为零)。您会得到额外的值 (2^24),因为它可以表示为 1.0 * 2^24。

当您尝试将 1 添加到 2^24 时,您会发现您会遇到 Jonathan 发布的链接中描述的舍入错误。

因此,对于整数,您需要将范围限制为 [-2^24,2^24]。如果你不能这样做,你要么需要仔细检查,要么将自己限制为整数!

于 2012-11-01T17:36:37.810 回答