![]() |
1
4
单精度
假设你是用科学记数法手工计算十进制数,根据规则,你可能只有四个有效数字。假设我让你用科学记数法写十二个,四个有效数字。回忆起初中,你写道: 1.200×10 一 现在我要计算12的平方,然后加0.5。这很简单: 1.440×10 二 + 0.005×10 二 =1.445×10 二 十二立方加上0.75怎么样: 1.728×10 三 +0.00075×10 三 =1.72875×10 三 但请记住,我只给你空间 四位有效数字 ,所以你必须 圆 ;然后我们得到: 1.728×10 三 + 7.5×10 - 1 =1.729×10 三 看到了吗?精度的不足会使计算结果出人意料。 在你的例子中,你在一个计算中得到了999999,你试图精确到0.01。日志 二 (999999)=19.93和对数 二 (0.01)=-6.64。差异大于23;因此,要准确执行此计算,需要超过23个二进制数字。 因为浮点数学本质上是精确的,所以它通常是货币计算的一个错误选择,在货币计算中必须精确到最后一分。但你真的关心你申请表中的零头吗?如果不是,那为什么不干脆去掉小数点,把美分(而不是美元)存储在64位整数中呢?二 六十四 ,超过了整个地球的GDP。 |
![]() |
2
3
浮点运算总是会产生奇怪的货币类型计算结果。 黄金法则是,浮点数对你测量升、码、光年、蒲式耳等的事物是好的,但对你计算的事物不是好的 羊、豆子、纽扣等。 大多数的金钱计算都是为了数硬币,所以使用整数数学 你不会得到奇怪的结果。要么使用固定的十进制算术 图书馆(在iphone上可能会被过度使用)或者存储你的数量 整个数字的美分和只转换成美元和美分的展示。 |
|
Rik Bloemers · for循环不接受任何浮点变量 2 年前 |
![]() |
zell · 为什么存储7个浮点数需要34字节? 2 年前 |
![]() |
Atharva Sunil Sathe · 如何删除任意数的小数点? 2 年前 |
![]() |
user1658887 · 为什么**2!=a*a一些彩车? 6 年前 |