スタンフォードのコンピュータサイエンスの授業で、ときどきこれは良問と思う問題がテストで出ることがある。僕の印象に残っているのは「xをfloatとするとき、x + 0.25 - 0.25 = xが成り立たないxを求めよ」というものだ。浮動小数点数を理解していないと、両辺が同じにならないケースがあるほうが不自然に思えるだろうから、この問題は浮動小数点数の奇妙さを結構うまく突いていると思う。この問題を元に浮動小数点数についてちょっと説明してみよう。 まずコンピュータ上での数について少し考えてみよう。コンピュータにおける数と、数学の整数や実数は、よく考えてみると全然違う。コンピュータは有限の記憶領域しか持っていないので、無数にある数を表すことが根本的にできない。つまりコンピュータ上の数は「本物の数になるべく似せた別の何か」だ。現実的には、例えば32ビットの数なら2^32パターンしか表せないので、そ
![x + 0.25 - 0.25 = xが成り立たないxとは何か|Rui Ueyama](https://cdn-ak-scissors.b.st-hatena.com/image/square/a8229fdffe771ae3f815696758fecf886a067002/height=288;version=1;width=512/https%3A%2F%2Fassets.st-note.com%2Fproduction%2Fuploads%2Fimages%2F903591%2Fprofile_3cbfe950fdd5a01d7eb0be427dc798a5.jpg%3Ffit%3Dbounds%26format%3Djpeg%26quality%3D85%26width%3D330)