1

我在大学做了一门课程,解释了(除其他外)如何命令您的数学执行以最大限度地提高精度并降低在有限精度环境中舍入错误的风险。

我们正在使用您通常的利息计算等来开发一个金融系统。有人可以分享/提醒我如何构建您的计算以最小化精度损失吗?

例如,我知道必须避免分裂。另外,除法时,如果可能,先除最大数。

4

4 回答 4

5

数值计算的基本规则是避免减去几乎相等的数字。乘法和除法总是准确的:在执行乘法或除法时,您最多会损失一位精度。但是,如果两个数字同意 n 位,则在它们的减法中可能会损失多达 n 位的精度。

有各种各样的技巧可以避免这种减法。例如,假设您需要为 x 的小值计算 exp(x) - 1。(这是您在计算利息时可能会做的事情。)如果 x 非常小,以至于 exp(x) 等于 1 到计算机的所有精度,那么减法将准确地给出 0,并且由此产生的相对误差将为 100% . 但是,如果您使用泰勒近似 exp(x) - 1 = x + x^2/2 + ... 您可以获得更准确的答案。例如,exp(10^-17) - 1 将完全不准确,但 10^-17 是一项泰勒近似值,将非常准确。这就是函数的expm1工作方式。log1p请参阅和expm1 这里的解释。

如果您担心数值准确性,则需要了解浮点数的解剖结构,以了解什么是安全的,什么不是。

于 2010-10-19T13:59:10.043 回答
5

使用美分而不是美元的金额。

于 2010-10-19T14:00:40.737 回答
3

精度损失通常与浮点二进制表示的使用有关。金融系统不应使用此类表示,而应使用任意精度的数字(例如 Java 中的 BigDecimal 和 .NET 中的小数)。那应该是你的第一步。

于 2010-10-19T14:01:05.557 回答
0

还有可能使用区间算术

于 2010-10-19T14:43:37.950 回答