1

matlabのシンボリックツールボックスを使用しているときに、次の奇妙なことに遭遇しました

/ >> syms e

/ >> y = 11111111111111111 ^ e

y = 11111111111111112 ^ e

多数を扱う場合には制限があるようです。セージのような完全に異なるシステムに変更することなく、これを解決できますか?

4

2 に答える 2

2

問題は、Matlabが数値をシンボリック式に変換する前にdoubleに解析することだと思います。ダブルには52ビットの仮数があるため、有効数字は約16桁ですが、数値は長くなります。

別の方法として、文字列から直接番号を作成することもできます。

y=sym('11111111111111111')^e

残念ながら、現在Matlabを利用できないため、この回答はテストされていません。

于 2012-09-03T11:26:41.227 に答える
2

これはバグではなく、機能です。そして、それは「丸め誤差」と呼ばれます

matlabは、Cプログラミング言語やC ++などの他の多くの言語のdoubleと同様に、double形式を使用して正規変数を格納します。

実際、次のように、「バグ」は「^x」とは何の関係もありません。

>> clear
>> syms y
>> format bank
>> y=11111111111111111
y =
 11111111111111112.00

単純な割り当てでさえ、「バグ」を引き起こします。

そして、デバッグモードを使用して、VSのメモリにdouble変数が実際にどのように格納されているかを確認できます。

ここに画像の説明を入力してください

スクリーンショットでわかるように、aとbの両方がメモリに「2ea37c58cccccccc」として保存されます。これは、コンピュータが一方を他方から区別できないことを意味します。

そして、それがあなたが見つけた「バグ」の理由です。

これを回避するには、代わりにシンボリック定数を使用できます。

>> y=sym('11111111111111111')
y =
11111111111111111

このようにして、コンピュータは「y」を別の形式でメモリに格納します。これにより、丸め誤差が回避され、メモリのコストが増加します。

于 2016-10-27T13:19:37.783 に答える