首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单金融计算中的数值精度

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

Stack Overflow用户
提问于 2010-10-19 21:50:30
回答 4查看 697关注 0票数 1

我在大学里学过一门课程,它解释了在有限精度的环境中,如何(以及其他事情)如何排序你的数学执行,以最大限度地提高精度并减少舍入误差的风险。

我们正在用你通常的利息计算和诸如此类的金融系统工作。有人能分享/提醒我如何组织你的计算,以最大限度地减少精度损失吗?

例如,我知道必须避免分裂。此外,当你除法时,如果可能的话,首先除以最大的数字。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-19 21:59:10

数值计算的基本规则是避免减去几乎相等的数字。乘法和除法总是准确的:在执行乘法或除法时,最多只能损失一位的精度。但是,如果两个数字的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这样的函数的工作方式。请参阅log1pexpm1 here的说明。

如果你关心数值的准确性,你需要理解anatomy of floating point numbers,以便知道什么是安全的,什么是不安全的。

票数 5
EN

Stack Overflow用户

发布于 2010-10-19 22:00:41

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

票数 5
EN

Stack Overflow用户

发布于 2010-10-19 22:01:06

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3969038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档