数列の一般項を、ループ処理した漸化式と比べて確かめていたのですが、どうもmatlabの計算が上手くいきません。
Num = 3940649673945355 * 3 % -> 1.182194902183606e+16
3940649673945355 * 3 = 11821949021836065 のはずですよね。しかし1の位を見るために1e16を引くと...
Num - 1e16 % -> 1.821949021836064e+15
となります。どうして 1.821949021836065e+15 ではなく1.821949021836064e+15 となるのでしょうか。解決策を教えてください。
できれば原因も教えてくださるとうれしいです。

 Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 4 Jan. 2022

1 Stimme

>どうして 1.821949021836065e+15 ではなく1.821949021836064e+15 となるのでしょうか。
MATLABがデフォルトで用いるdouble型(倍精度浮動小数点数(64bit))で表現できる有効桁数を超えたからです。
% 10進数 の 11821949021836065 を 変換 すると…
% IEEE754倍精度(double, 64bit = 8Byte)では… 4344FFFFFFFFE990
% 符号部 0、 指数部 434 仮数部 4FFFFFFFFE990 の値を 変換 すると…
% 10進:11821949021836064
>解決策を教えてください。
  • 整数なら符号付/無の整数型(u)int64を使えば解決します。
Num = int64(3940649673945355) * 3
Num = int64 11821949021836065
Num = vpa(3940649673945355) * 3
Num = 
11821949021836065.0

1 Kommentar

丁寧な回答ありがとうございます。
「正の数値の範囲は 2.22507 x 10^-308 ~ 1.79769 x 10^308」と書いてあったので、double型で大丈夫なはず...と思っていたのですが、有効桁数があるのですね。
今回は整数しか出てこないのでint64を使用しようと思います。
複数の手法を載せてくださり、ありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Produkte

Version

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!