DAVIDマラン:それでは、あなたの心を吹くましょう。 それは、1分割、現実の世界で判明 10で実際に1/10、または0.1である。 しかし、コンピュータでのみ有限のを持っている へのビットの数 数を表すには、常にできない 1月10日のような数を表すと 完璧な精度。 換言すれば、コンピュータは、時には有する 判定呼び出しを行うとしないように 必ずしも番号あなたを表す として正確にあなたが意図したとおりたい。 例えば、私はに戻ったとし このプログラムとは0.1に変更、 それによって、そのことを示すOH、0.28、 私はにprintfにprintf関数が欲しい 精度の28場所。 それでは、プログラムを保存し、コンパイルしてみましょう、 メイクfloats2と今回。 ドットスラッシュfloats2でそれを実行します。 そして、親愛なる神、私は0.1を参照していないこの時期、 可愛いですが0.10000000、 良い今のところ。 しかし、その後、14901161193847656250。 さて、何が起こっているの? まあ、それはフロートがあることが判明 通常、コンピュータの内部に格納さ 32ビットの。 32は明らかに有限個であり、これ あなただけ表現できることを意味します 32ビット有限数で 浮動小数点値。 残念ながら、つまり コンピュータは、すべての可能を表すことができない 浮動小数点数、または実数、 世界に存在することを、 それだけで非常に多くのビットを持っているので。 だから、コンピュータが明らかに何 この場合に行わに1/10を表している 最も近い浮動 それができることをポイント値。 しかし、我々は見てみると、我々がここにあるように、28に 小数点以下は、私たちはそれを見始める 不正確。 だから、これは問題です 完璧な解決策はありません。 我々は、代わりにフロートの二重を使用することができます として64ビットを使用する傾向がある 32に対向する。 しかし、もちろん、64も有限である、 その問題は、意志 でもダブルスで残っている。