我计算用计算器计算某个值X,和我做计算得出不同的答案的顺序。请有人赐教,至于为什么是这样的情况?相同的公式,但不同的答案
CASE 1: X =(730 * 4800)/ 1024 = 3421
CASE 2: X = 730 *(一千〇二十四分之四千八)= 2920
- CASE 1是实际上更接近期望的结果。
- 似乎是在案例2中损失精度...?
我计算用计算器计算某个值X,和我做计算得出不同的答案的顺序。请有人赐教,至于为什么是这样的情况?相同的公式,但不同的答案
CASE 1: X =(730 * 4800)/ 1024 = 3421
CASE 2: X = 730 *(一千〇二十四分之四千八)= 2920
在执行代替正常(浮点)除法的整数除法这两种情况。
整数除法是小数部分(余数)被丢弃的除法。
例如,在CASE 2中,在(4800/1024)上执行整数除法,结果为4(而不是4.6875)。从那里乘导致730 * 4 = 2920
我不知道你正在使用的计算器,但通常当你想避免你可以用一个浮点数而不是整数除法。在你的情况下,1024.0
。现在,如果这是特定编程语言的一部分,则可能必须使用不同的表示法,例如1024.0f
或(float)1024
。
迫使你需要改变你的计算,以
CASE 1一个浮点除法:
X = (730 * 4800)/1024.0 = 3421.875
案例2:
X = 730 * (4800/1024.0) = 3421.875
当计算事业部,有些时候我们失去了浮动点精度。所以当你首先计算分区时,会出现一些错误。现在当分割后的结果相乘时,你实际上乘以错误。在那里你首先计算乘法,所以我们不会失去任何东西。然后它被分开,所以错误仍然很小。
尝试这样的事情1/(1/10000)
。我确信它会增加ZeroDivision
错误,但它实际上是10000
而不是infinity
。
这是关系到一个特定的编程语言? –
我在编程时遇到了这个... – TheLoneJoker