zeroieme 发表于 2014-10-26 17:15:20

Mathematica结果求测试求解释

ToString, InputForm]
ToString, InputForm]
ToString, InputForm]

wayne 发表于 2014-10-26 17:28:43

问题何在?

没看到问题呢

zeroieme 发表于 2014-10-26 18:45:58

wayne 发表于 2014-10-26 17:28
问题何在?

没看到问题呢

最后一位

mathe 发表于 2014-10-26 19:09:02

计算有误差,二进制内部首先有舍入,然后转化为十进制再次舍入

wayne 发表于 2014-10-26 20:45:56

试一下这个命令
FullForm]
你会发现有一个小角标,这个小角标在Mathematica里面叫做 NumberMarks ,用来标记 Precision。
如果小角标后面没有跟数字,就表示默认的系统精度,MachinePrecision,即15.6位。

===
ToString函数的操作对象是 expr,即expr的FullForm形式,至于最后一位的舍入误差,为啥会是这么多,应该跟数的具体实现有关。

@mathe, mathe可否有兴趣挖掘出这个具体表达?
比如24/13,取小数点后16位(前15位是准确的,最后一位是带有误差),那么这个最后一位会是啥?

wayne 发表于 2014-10-28 15:10:57

ToString,InputForm]
的输出是 1.8461538461538463,跟楼上的mathe的分析完全一致,我想这样算是彻底回答了楼主的问题了吧

cn8888 发表于 2014-10-28 17:00:43

不纠结这个,你想要准确就多保留小数

zeroieme 发表于 2015-7-12 10:50:46

问题又来了
N)/4]
N)/4, 4]
结果是
0.03125
0.03816

N)/4]
等于以下结果
N - N[(128433317878965*Sqrt)/4]

而下面输出很规则。
Do)/4, i]], {i,20}]

是否意味着不指定精确度的N不可靠,而且还要故意让Mathematica多算几位再另行处理?

wayne 发表于 2015-7-14 11:34:28

zeroieme 发表于 2015-7-12 10:50
是否意味着不指定精确度的N不可靠,而且还要故意让Mathematica多算几位再另行处理?
这个我宁愿看成是Mathematica的bug 。
我担心Mathematica的N函数的内部实现 存在过早优化的问题:

当f,g都比较复杂的时候,Mathematica优化成了: N=N +N
-------------------------------
有空再深入追究一下

zeroieme 发表于 2015-7-15 15:52:03

wayne 发表于 2015-7-14 11:34
这个我宁愿看成是Mathematica的bug 。
我担心Mathematica的N函数的内部实现 存在过早优化的问题:



自然是Mathematica的bug 。
作为D版使用者,也不好向Mathematica公司反馈。只能探讨自己写代码时如何绕开这个bug。


BTW wayne能帮忙反馈么;P
页: [1] 2
查看完整版本: Mathematica结果求测试求解释