你猜1.001`2 /. (1.002`2 -> a)会返回啥?
mathematica吧
全部回复
仅看楼主
吧务
level 15
xzcyr 楼主
这两天的一点关于模式匹配和任意精度数的小发现,文档里好像没有讲。(期待有人打我脸。)
2021年07月03日 13点07分 1
吧务
level 15
xzcyr 楼主
匹配的机制我没深入研究,反正不是单纯的数值比较,要知道
1.01`2 == 1.02`2
已经返回 True 了,但匹配不会发生。
2021年07月03日 13点07分 2
吧务
level 10
MatchQ进行的比较应该就是Internal`HashSameQ
Equal和SameQ认为这1.01`2和1.02`2相等倒是文档有说明的正常行为了,比较令人注意的是1.001`2和1.002`2有相同散列码但语义上不等,MakeBoxes和BinarySerialize对它们都有不同的行为,基本可以认为任意精度实数在内存中也是以InputForm这样存在的。
2021年07月04日 09点07分 3
任意精度数的算术是Significance arithmetic,会分别存储数据和不确定度也是很正常的。
2021年07月04日 10点07分
@asdasd1dsadsa 看了下文档,存的不是不确定度,存的还真就是Precision那个精度,用浮点数存的。
2021年07月04日 10点07分
有意思,不过文档里好像也没说 Hash[#, "Expression"] & 具体是怎么算的……
2021年08月07日 06点08分
@xzcyr MSE上有人分析了散列算法,但表达式的内部表示方式还没人透露。总的来说这部分代码是系统的基础,属于比较机密的了。
2021年08月07日 09点08分
1