我在使用Matlab时遇到了一些问题。我正在做一些关于OTC工具(定价,构建折扣曲线等)的计算,首先在Excel中,然后在Matlab中进行(用于比较)。虽然我100%确定Excel中的计算是好的(与市场数据相比),但似乎Matlab产生了一些差异(即-4,18-05E)。 Matlab算法看起来很好。我想知道 - 也许是因为Matlab正在进行一些计算 - 我听到了一些关于它的信息。我正在尝试通过函数 vpa()将双数转换为浮点数,但它看起来不能使用双数。还有其他想法吗?
答案 0 :(得分:4)
Excel使用符合IEEE 754浮点规范的64位双精度浮点数。
Excel处理=1/5
和等结果的方式来准确计算它们(尽管这个例子不是一个二元理性)完全取决于格式化 。它类似地处理=1/3 + 1/3 + 1/3
。如果你考虑一下它真的很聪明:Excel的实现者没有真正的选择,因为普通的Excel用户不是 au fait 具有更好的浮点运算点,而且只是鄙视一个电子表格包,它甚至无法使1/5
正确#34;
所有人都说,如果两个系统之间的差异为-4,18-05E,那你就非常不走运了。这是因为双浮点精确到大约15个有效数字。如果您一直使用双精度浮点类型,那么您的算法实现得非常差,因为错误项会冒泡到那个数量级。
最有可能(我也在金融界工作),区别在于您对折扣曲线的内插方式。如果我是你,我会首先看看。
答案 1 :(得分:1)
鉴于错误的值与默认的format
设置相比,这几乎可以肯定是因为使用默认的format short
并将命令行的输出与实际值进行比较。
x = 5.4444418
输出:
x =
5.4444
然后:
x-5.4444
输出:
ans =
4.1800e-05
x
中存储的值保持为5.4444418
,它只是命令行的度量输出发生变化。