私の先生からの質問は次のとおりです。可能であるが、丸め誤差が発生する可能性のある課題を書き留めてください。これは Java です。
float f;
long l;
double d;
f = l;
d = l;
それが答えですが、なぜですか?float の値と最大値はより高く、float は浮動小数点数です。対照的に、 long は完全な数値にすぎないのに、なぜ丸め誤差があるのでしょうか?
浮動小数点数は、大きくなるにつれて絶対精度が低下します。ある点を超えると、正確に表現できる最も近い 2 つの浮動小数点数の差は 1 を超えます。
または逆に見るには、 に最も近いfloat
表現を見てくださいLong.MAX_VALUE
。次に、最も近いfloat
表現を見てくださいLong.MAX_VALUE - 1
...
long
他のことは別として、すべてがデータ型のサイズだけで表現できるわけではないことを理解できるはずですfloat
。2 32の可能なビットパターンfloat
(すべてが正規数であるとは限りません) と 2 64 の可能なビットパターンがあります。のためにlong
。
理由: float 32 ビット、long は Java で 64 ビット