使用浮子作为计数器 - 有什么问题吗?

时间:2014-02-17 23:06:06

标签: floating-point go floating-point-precision

我正在看的代码使用golang float64作为计数器,这是否会导致某些时候精度下降的问题?具体来说,所有整数都表示在float64所涵盖的范围内?如果没有,我在哪里开始遇到问题?我什么时候用完了连续的整数?

如果你想知道,使用float64作为计数器的原因是因为它是[] float64的一部分,它包含许多不是整数的指标。

2 个答案:

答案 0 :(得分:4)

Golang规范说,“float64是所有IEEE-754 64位浮点数的集合。”这通常称为双精度数,

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

如果有兴趣,你可以阅读它的所有荣耀细节,但要回答你的问题,引用,

“......下一个范围,从2 53 到2 54 ,一切都乘以2 ......”

因此,如果你想将它用作计数器,即正整数,那么在2 53 = 9,007,199,254,740,992之前你就不会有问题。

答案 1 :(得分:2)

是的,float64有52位来存储您的计数器。你应该准确到2 53

(旁注:整个JavaScript语言仅使用浮点。)