0
|
John M Gant aman_novice · 技术社区 · 14 年前 |
1
5
为什么不?这听起来正是解决你问题的办法。加整数和除法一次可能比加浮点数和除法快得多。
每次除以100,都会累积错误(因为100不是2的幂次)。你所有的数字在
在你的例子中,因为你除以100,你可以把最后的和四舍五入到最接近的100,得到正确的结果。 |
2
2
您可能不认为Double使用base-2作为内部表示。因此,尽管乍一看这些值看起来不是很精确或很小,但使用base-2表示它们可能非常困难。 取1/3=0.333…例如。不能用以10为基数的有限位数精确地描述该值(除非将其存储为分数,但我们将其放在一边)。同样的道理也适用于以2为基数的某些值,这些值看起来和以10为基数的数字一样好。 0.01就是这样一个例子。要将其存储在base-2中,需要无限个数字,因此1.0/100.0不精确(如float或double)。用10为底的整数除以100,就可以知道这会导致什么。 一些编程语言为财务计算提供了一个以10为基数的浮点类型(例如以C表示的十进制)。它更适合于我们习惯使用的10基材料,但对计算机来说更贵。当然,还有一些数字无法表示(1/3,…)。 |
3
1
读 The Floating-Point Guide ,那么你就会明白:
基本上,每个中间值(除以100)都有舍入误差。最终的结果也保留了一个错误,这一点也不罕见。
注意第一种情况(需要具体说明 十进制的 结果) 不 适用于大多数情况。 |
4
1
通常,在比较不同实现中的浮点数时,可以建立某种类型的通过/失败标准来确定相等性(或零)。比如10^10表示双精度,10^6表示单精度。例如,如果您将matlab结果与应用程序代码生成的结果进行比较,并确认不可避免的精度错误,则需要一些这样的基准。 |
5
0
如果必须使用浮点数,则可能需要:
据我所知,并不能保证内存和CPU中浮点寄存器的宽度是相同的(即,当转移到宽度较小的位置时,可能会发生一些取整),存储值的位置取决于编译器生成的机器代码。 |
Rik Bloemers · for循环不接受任何浮点变量 2 年前 |
zell · 为什么存储7个浮点数需要34字节? 2 年前 |
Atharva Sunil Sathe · 如何删除任意数的小数点? 2 年前 |
user1658887 · 为什么**2!=a*a一些彩车? 6 年前 |