
先ほどC言語のプログラムで
#include <stdio.h>
main()
{
double d_1,d_2,d_3;
d_1=0.1;
d_2=0.001;
d_3=d_1-d_2;
printf("%22.16g-%22.16g=%22.16g\n",d_1,d_2,d_3);
d_1=1.0;
d_2=1.000000000000001;
d_3=d_1-d_2;
printf("%22.16g-%22.16g=%22.16g\n",d_1,d_2,d_3);
d_1=1.0;
d_2=0.00000000000000001;
d_3=d_1-d_2;
printf("%22.16g-%22.16g=%22.16g\n",d_1,d_2,d_3);
}
というのを作ったのですが結果が
0.1 - 0.001 =0.099
1 - 1.000000000000001 =-1.110223024625157e-15
1 - 1e-17=1
でした。この結果はどういう意味なのでしょうか?
初め以外の二つはeが出てきたり、数字の羅列だったりなぜこうなったのか分からないのです?
教えてください。お願いします。
No.1ベストアンサー
- 回答日時:
計算機は小数(浮動小数)も2進数で保持します。
このとき、2を何度掛けていっても整数にならないものに関しては、誤差を丸めて保持することになります。
0.001くらいであれば誤差が非常に小さいため、計算結果に影響を与えることは
ありません。身近にあるPCに搭載されているCPUではdouble型の仮数部が
52ビットということで、10進にして15.35桁程度しか保持できません。
ということで、16桁以上の計算が出てくる場合は、誤差の影響を受けることに
なります。
1-(1+10^(-15))=-10^(-15)と計算されそうですが(1+10^(-15))は16桁で
表現するため、丸めた誤差が無視できないものとなり、上記の値が出てくることに
なります。
また、1-10^(-17)は18桁であり先ほどの15.35桁では表現できないので、
計算機では1として保持されます。
ちょっと解り難い説明ですが、いかがでしょうか。
No.2
- 回答日時:
浮動小数点数はa×10のb乗という形で値を保持します。
1e-17 と表示されたら、1×10の-17乗と読み替えればいいです。
つまり、
1e-17→0.00000000000000001
-1.110223024625157e-15→0.000000000000001110223024625157
ということです。
%g のかわりに %f を使うと結果が変わる事もあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C言語の関数のextern宣言
-
卒業研究でよく分からないとこ...
-
C言語 関数、変数の宣言について
-
C言語について(初心者)
-
C言語のことです。写真(見にく...
-
Windows Formアプリからコンソ...
-
DNCL(共テ用プログラミング言語...
-
C言語について。
-
visual studio 2022でのC#プロ...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
C# で 数式文字列処理を処理す...
-
gccを行ってもexeファイルが生...
-
c言語
-
C言語 列挙型(enum型)変数について
-
C++でデスクトップGUIアプリ開...
-
c言語でイベントフラグを使った...
-
必ずyou bet と表示されます
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
DLLファイルの逆コンパイラにつ...
-
Windows Formアプリからコンソ...
-
大量のデータを読み込んで表示...
-
C言語の関数のextern宣言
-
VisualStudioでC++クラスを追加...
-
【C言語】全角文字の配列を、全...
-
VisualStudio2022でC言語プログ...
-
C++でデスクトップGUIアプリ開...
-
gccを行ってもexeファイルが生...
-
C#でTreeViewのCheckBoxのサイ...
-
C#でログファイルにファイルパ...
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
Notepad++の関数リスト表示の変...
-
C言語について。
-
Cのコンパイルでコメントアウト...
-
visual studio 2022でのC#プロ...
-
コンソールアプリを作成するの...
-
C言語 バッファについて。
おすすめ情報