Oracle のドキュメントに矛盾する参照があります。10 進数を FLOAT に格納する方法とデータベースの NUMBER 型に格納する方法に違いはありますか?
C などから思い出したように、float には int にはない精度の制限があります。Rg、float の場合、0.1(Base 10) は 0.110011001100110011001101(Base 2) として概算されます。これは、およそ 0.100000001490116119384765625 (Base 10) のようなものです。ただし、int の場合、5(底 10) は正確に 101 (底 2) です。
これが、C で次のコードが期待どおりに終了しない理由です。
float i;
i = 0;
for (i=0; i != 10; )
{
i += 0.1
}
ただし、Oracle のドキュメントの他の場所で、FLOAT が NUMBER として定義されていることがわかります。私が理解しているように、Oracle の NUMBER 型の実装では、C の float と同じ問題は発生しません。
それで、ここで本当の話は何ですか?Oracle は、float/FLOAT で起こると予想される標準から逸脱していますか?
(私がそれらを使用する目的については、ハリケーンの中の蜂の屁の違いであると確信していますが、0.1 * 10が1.00000000000000001になると疑問が生じることはわかっています)