1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVIDマラン:それでは、あなたの心を吹くましょう。 3 00:00:01,750 --> 00:00:06,500 それは、1分割、現実の世界で判明 10で実際に1/10、または0.1である。 4 00:00:06,500 --> 00:00:10,370 しかし、コンピュータでのみ有限のを持っている へのビットの数 5 00:00:10,370 --> 00:00:14,290 数を表すには、常にできない 1月10日のような数を表すと 6 00:00:14,290 --> 00:00:15,500 完璧な精度。 7 00:00:15,500 --> 00:00:18,640 換言すれば、コンピュータは、時には有する 判定呼び出しを行うとしないように 8 00:00:18,640 --> 00:00:22,740 必ずしも番号あなたを表す として正確にあなたが意図したとおりたい。 9 00:00:22,740 --> 00:00:27,020 >> 例えば、私はに戻ったとし このプログラムとは0.1に変更、 10 00:00:27,020 --> 00:00:32,073 それによって、そのことを示すOH、0.28、 私はにprintfにprintf関数が欲しい 11 00:00:32,073 --> 00:00:34,350 精度の28場所。 12 00:00:34,350 --> 00:00:39,330 それでは、プログラムを保存し、コンパイルしてみましょう、 メイクfloats2と今回。 13 00:00:39,330 --> 00:00:41,910 ドットスラッシュfloats2でそれを実行します。 14 00:00:41,910 --> 00:00:49,980 そして、親愛なる神、私は0.1を参照していないこの時期、 可愛いですが0.10000000、 15 00:00:49,980 --> 00:00:51,070 良い今のところ。 16 00:00:51,070 --> 00:00:57,830 しかし、その後、14901161193847656250。 17 00:00:57,830 --> 00:00:58,880 >> さて、何が起こっているの? 18 00:00:58,880 --> 00:01:02,280 まあ、それはフロートがあることが判明 通常、コンピュータの内部に格納さ 19 00:01:02,280 --> 00:01:03,500 32ビットの。 20 00:01:03,500 --> 00:01:07,340 32は明らかに有限個であり、これ あなただけ表現できることを意味します 21 00:01:07,340 --> 00:01:11,050 32ビット有限数で 浮動小数点値。 22 00:01:11,050 --> 00:01:14,980 残念ながら、つまり コンピュータは、すべての可能を表すことができない 23 00:01:14,980 --> 00:01:18,110 浮動小数点数、または実数、 世界に存在することを、 24 00:01:18,110 --> 00:01:19,980 それだけで非常に多くのビットを持っているので。 25 00:01:19,980 --> 00:01:23,940 >> だから、コンピュータが明らかに何 この場合に行わに1/10を表している 26 00:01:23,940 --> 00:01:26,880 最も近い浮動 それができることをポイント値。 27 00:01:26,880 --> 00:01:31,050 しかし、我々は見てみると、我々がここにあるように、28に 小数点以下は、私たちはそれを見始める 28 00:01:31,050 --> 00:01:31,970 不正確。 29 00:01:31,970 --> 00:01:34,480 だから、これは問題です 完璧な解決策はありません。 30 00:01:34,480 --> 00:01:38,060 我々は、代わりにフロートの二重を使用することができます として64ビットを使用する傾向がある 31 00:01:38,060 --> 00:01:39,410 32に対向する。 32 00:01:39,410 --> 00:01:42,290 しかし、もちろん、64も有限である、 その問題は、意志 33 00:01:42,290 --> 00:01:43,630 でもダブルスで残っている。 34 00:01:43,630 --> 00:01:46,323