私はこれを C プログラミング言語で何度も読みました。デフォルトでは、浮動小数点値は float ではなく double 型であるということです。
フロート PI = 3.14;
この場合、PI の値は 3.14-some_small_valueになります。これは精度の考慮によるものです。これは、8 バイトの値が4 バイトの変数に割り当てられるためです。メモリの観点から、または内部的にこれらの値がどのように変更されるかを説明してください。
私はこれを C プログラミング言語で何度も読みました。デフォルトでは、浮動小数点値は float ではなく double 型であるということです。
フロート PI = 3.14;
この場合、PI の値は 3.14-some_small_valueになります。これは精度の考慮によるものです。これは、8 バイトの値が4 バイトの変数に割り当てられるためです。メモリの観点から、または内部的にこれらの値がどのように変更されるかを説明してください。
この場合、観察された変化は、8 バイト形式から 4 バイト形式への変換とはあまり関係がありません。またはとして宣言するかどうかに関係なく、あなたのPI
意志は とは異なります。値を 2 進浮動小数点形式で正確に表すことはできません。4、8、または 1234 バイトでは、 の正確なバイナリ表現を構築するにはまだ十分ではありません。従来のバイナリ浮動小数点形式では、この表現は無限に長いためです。3.14
float
double
3.14
3.14
の正確なバイナリ表現3.14
は
11.001000111101011100001010001010001111010... = 11.0(01000111101011100001010001)
01000111101011100001010001
その部分が無限に何度も繰り返されることを意味します。を使用するfloat
と、表現全体が の容量に切り捨てられ (または丸められ)、 のfloat
場合はdouble
の容量に切り捨てられdouble
ます。このため、浮動小数点型は3.14
近似値のみを表します。double
よりも正確になりますfloat
が、それでも完全に正確ではありません。
この丸めは、 (GCC コンパイラからの結果) の場合と場合に3.14
変わるものとまったく同じです。コンパイラが別の丸め戦略を使用している可能性があり、その結果、値がわずかに異なります。3.1400001049041748046875
float
3.140000000000000124344978758017532527446747
double