sbe*_*idy -1 python math floating-point
我在 python 中使用浮点运算时遇到了这个问题。我正在求解的方程如下:
-a *((x-m)*110.0*(1-m))**b +a*((x-m)*110.0*(1-m))**c
a is a really large positive number (in the hundred thousands)
b is 1.0000002
c is 0.9999998
Run Code Online (Sandbox Code Playgroud)
当我在 excel 中执行此操作时,我得到准确的结果,但当我在 python 中执行此操作时,我得到完全不准确的结果。
在我乘以 -a 和 a 之前,每个单独部分的结果完全相同。所以 ((xm) 110.0 (1-m))**b 和 ((xm) 110.0 (1-m))**c 与它们的 excel 计算值完全相同,但是当它们乘以大数时,它们彻底改变。
我该怎么做呢?我必须使用不同的语言吗?这个问题是只出现在Python中还是所有语言都有?
编辑:Excel 中的方程与 Python 中的方程完全相同。一模一样。在我乘以 a 和 -a 之前,数字也是相同的。然后他们都落后了 5 分。当 x=0.5 且 m = 0.265 时,Excel 中的答案约为 0.47,而 Python 中的答案约为 -0.67
很难理解您正在寻找的精度,但我认为您也可以看一下十进制模块。-
\n\n\n与浮点数据类型相比,它具有以下几个优点:
\n十进制 \xe2\x80\x9cis 基于浮点\n模型,该模型是根据人的想法\n设计的,并且必然具有\n最重要的指导原则 \xe2\x80\x93\n计算机必须提供一种以相同方式工作的算术\n就像人们在学校学习的\n算术一样。\xe2\x80\x9d \xe2\x80\x93 摘自十进制\算术规范。
\n可以精确地表示十进制数。相比之下,像 1.1\n和 2.2 这样的数字在二进制浮点数中没有精确的\n表示。最终用户通常不会\n期望 1.1 + 2.2 显示为\n3.3000000000000003,就像二进制浮点一样。
\n精确性延续到了数学上。在十进制浮点数中,\n0.1 + 0.1 + 0.1 - 0.3 恰好等于零。在二进制浮点中,\n结果为 5.5511151231257827e-017。\n虽然接近于零,但差异\n阻止了可靠的相等性测试,并且\n差异可能会累积。出于这个原因,在具有严格相等不变量的会计应用程序中,十进制是首选。
\n小数模块包含\n有效位的概念,因此\n1.30 + 1.20 等于 2.50。保留尾随零以指示重要性。这是货币应用程序的惯用表述方式。对于乘法,\xe2\x80\x9cschoolbook\xe2\x80\x9d\n方法使用被乘数中的所有数字。例如,1.3 * 1.2\n给出 1.56,而 1.30 * 1.20 给出\n1.5600。
\n
| 归档时间: |
|
| 查看次数: |
12752 次 |
| 最近记录: |