3940649673945355 * 3 の計算が合いません。

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

채택된 답변

Atsushi Ueno
Atsushi Ueno 2022년 1월 4일
>どうして 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
昴(Subaru) 吉野(Yoshino)
昴(Subaru) 吉野(Yoshino) 2022년 1월 5일
丁寧な回答ありがとうございます。
「正の数値の範囲は 2.22507 x 10^-308 ~ 1.79769 x 10^308」と書いてあったので、double型で大丈夫なはず...と思っていたのですが、有効桁数があるのですね。
今回は整数しか出てこないのでint64を使用しようと思います。
複数の手法を載せてくださり、ありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!