2

Matlabでランダムな倍精度値を作成しました

x = rand(1,1);

次に、x の可能なすべての桁を次のように表示します。

vpa(x,100)

そして取得します:

0.2238119394911369 7971853298440692014992237091064453125

x を .mat ファイルに保存し、それを Mathematica にインポートしてから変換します。

y = N[FromDigits[RealDigits[x]],100]

そして取得します:

0.2238119394911369 0000

次に、Matlab に戻って使用します (Mathematica のすべての数字をコピーして Matlab に貼り付けます)。

 vpa(0.22381193949113690000,100)

そして取得します:

0.22381193949113689 64518061375201796181499958038330078125

同じ倍精度変数に大きな違いがあるのはなぜですか?

Mathematica と Matlab の間でデータを交換するときのギャップを埋める方法は?

4

2 に答える 2

4

ReadListの代わりに を使用することで、この問題を解決できますImport。表示される丸めと等価性を調べるために、いくつかのデモ手順を以下に追加しました。最終テストに注意してくださいd == e。はFalseMathematica 7 にありますがTrue、Mathematica 9 にあります (予想されるすべての数字を含む)。そのため、バージョン 9で精度が向上したようImportです。デモではデモ ファイルを使用します。

demo.dat の内容:

0.22381193949113697971853298440692014992237091064453125
"0.22381193949113697971853298440692014992237091064453125"

探索中:-

a = Import["demo.dat"]
b = ReadList["demo.dat"]
a[[1, 1]] == a[[2, 1]]
b[[1]] == b[[2]]
a[[1, 1]] == b[[1]]
a[[1, 1]] == ToExpression@b[[2]]
b[[1]] // FullForm
c = First@StringSplit[ToString@FullForm@b[[1]], "`"]
b[[2]]
ToExpression /@ {c, b[[2]]}
d = N[FromDigits[RealDigits[a[[1, 1]]]], 100]
e = N[FromDigits[RealDigits[b[[1]]]], 100]
d == e
于 2013-11-06T10:00:40.527 に答える