2

編集:問題は、入力の精度を指定しても、別の方法で指定しない限り、matlab が double に変換されることでした。私の間違い。

単純な 64 ビット整数を matlab に読み込むと、python または Windows 電卓で変換を行う場合とは異なる値が得られるようです。

内容が 8 バイトの小さなファイルがあります。

0x99, 0x1e, 0x6b, 0x40, 0x27, 0xe3, 0x01, 0x56

私はmatlabで以下を使用します:

fid = fopen('test.data')
input = fread(fid, 1, 'int64')

私は得る

input = 6197484319962505200

ただし、python または Windows 電卓のいずれかを使用すると、 の異なる 10 進数表現が得られ0x5601e327406b1e99ます。両方とも、私が取得する必要があると予測 していますinput = 6197484319962504857(これは 343 異なります)。それは明らかにエンディアンの問題ではありません。

大きなバイナリ ファイルから double を読み取ると奇妙な結果が得られたため、最初はこれをテストするように導かれました。次に、それらを整数として読み込んで、手で比較してみました。

私の質問は、何か間違ったことをしているのですか、見落としていることがありますか、それともmatlabがここでエラーを起こしていますか? win64 matlab R2010a を使用しています。

4

1 に答える 1

6

問題freadは、実際にそれをdoubleとして読み込んでいることのようです。

>> class(input)

ans =

  double

数値が非常に大きいため、おそらくこれが最も近いdouble値です。

int64ソースファイルでタイプを指定することに加えて、matlab変数を手動で指定すると、うまくいきます(のドキュメントをfread参照してください)。

>> input = fread(fid, 1, '*int64')

input =

  6197484319962504857
于 2012-04-23T21:52:26.720 に答える