Math 简单金融计算中的数值精度

Math 简单金融计算中的数值精度,math,numerical-methods,Math,Numerical Methods,我在大学上过一门课,解释了如何(除其他外)在有限精度的环境下,使数学运算达到最大精度,降低舍入误差的风险 我们正在研究一个金融系统,你通常的利息计算等等。有人能告诉我/提醒我如何组织你的计算以最大限度地减少精度损失吗 例如,我知道必须避免分裂。此外,如果可能的话,在除法时,要先除掉最大的数。数值计算的基本规则是避免减去几乎相等的数。乘法和除法总是精确的:在执行乘法或除法时,最多会损失一点精度。但是,如果两个数字等于n位,那么在减法过程中可能会损失多达n位的精度 有各种各样的技巧可以避免这种减法。

我在大学上过一门课,解释了如何(除其他外)在有限精度的环境下,使数学运算达到最大精度,降低舍入误差的风险

我们正在研究一个金融系统,你通常的利息计算等等。有人能告诉我/提醒我如何组织你的计算以最大限度地减少精度损失吗


例如,我知道必须避免分裂。此外,如果可能的话,在除法时,要先除掉最大的数。

数值计算的基本规则是避免减去几乎相等的数。乘法和除法总是精确的:在执行乘法或除法时,最多会损失一点精度。但是,如果两个数字等于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
的说明


如果你担心数值的准确性,你需要理解,以便知道什么是安全的,什么是不安全的。

数值计算的基本规则是避免减去几乎相等的数字。乘法和除法总是精确的:在执行乘法或除法时,最多会损失一点精度。但是,如果两个数字等于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
的说明


如果您担心数字的准确性,您需要了解,以便知道什么是安全的,什么是不安全的。

使用以美分为单位的金额,而不是美元。

使用以美分为单位的金额,而不是美元。

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

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

也有可能使用

也有可能使用

当减法时,如果一个数字非常大,另一个很小,结果将是相同的大数字,不会改变;重复多次也会产生显著的漂移。啊哈!我现在还记得在这方面使用的泰勒近似。你提出的论点正是我想要的。你没有我可以继续阅读的在线资源吗?我会很快查看你的博客。除了我答案中的链接,你可能还想看看。特别是关于正弦函数,但更普遍的是关于泰勒近似、相对误差等。当进行减法时,如果一个数很大,另一个数很小,结果将是相同的大数,不变;重复多次也会产生显著的漂移。啊哈!我现在还记得在这方面使用的泰勒近似。你提出的论点正是我想要的。你没有我可以继续阅读的在线资源吗?我会很快查看你的博客。除了我答案中的链接,你可能还想看看。特别是关于正弦函数,但更一般地说,是关于泰勒近似,相对误差,等等。是的,我同意,我也应该这样做。是的,我同意,我也应该这样做。