実数型の変数って、本当に実数を表現できているの?


実数型で整数?それって本当に「実数」なの?

こんにちは。ゆうせいです。
今回は、プログラミングの「実数型」と「整数型」という言葉について、一歩踏み込んだお話をしていきます。

テーマは、「実数型の変数って、本当に実数を表現できているの?」という疑問。とても良い視点ですね。
この話、実はプログラミングの根幹に関わる「データの表現方法」に直結しているんです。

では、見ていきましょう!


実数型と整数型の違いって何?

H3: 「整数型(int)」とは?

プログラミングにおいて、整数型(int)は、文字どおり小数点を持たない数を扱う型です。たとえば:

  • 1
  • -50
  • 123456

のような「まるい数」です。
高校数学でいうところの整数(Z:ゼット)に相当します。

そして、コンピュータ内部ではこれらの数を2進数(0と1)の並びで表現しています。
例えば、10 という数はコンピュータでは 00001010 のように保存されます。

H3: 「実数型(float)」とは?

一方、実数型(float あるいは double)は、小数点を含む数値を扱うための型です。たとえば:

  • 3.14
  • -0.0001
  • 1.0(←これも実数型!)

高校数学でいうところの実数(R:アール)に近いですが、実際には完全には一致しません。


「実数型」は本当に実数を表現できるの?

ここが今日の本題ですね。
答えから言うと……完全には表現できません

H3: コンピュータにとっての「実数」は「近似値」

コンピュータはメモリに限りがあるため、無限に続く小数(たとえば円周率πや√2など)を厳密に表すことはできません

例:

π(円周率) = 3.1415926535...(無限に続く)

でも、コンピュータが扱えるのは例えば:

3.1415927 (float型:32ビット)
3.141592653589793 (double型:64ビット)

と、小数点以下の桁数に限界があるんです。

H3: 「実数型の整数」はどうなるの?

これが面白いところで、整数を実数型で表すことは「できる」けれど、誤差が入る可能性があります。

例:

float a = 1000000001;
int b = 1000000001;

この場合、a(実数型)は32ビットで約7桁しか正確に扱えないため、1000000001 は 1000000000 に丸められてしまうこともあります。

H3: つまり、「実数型の整数」は「実数に似た何か」

実数型は、あくまで有限ビットでの近似的な実数表現です。
完全な実数(R)ではありません。

数学でいう実数は、たとえば無限に小さい数まで扱える連続的な量です。
でも、プログラムの中で使う実数型は、あくまで「それっぽい」もので、有限精度の制約があります。


実数型と整数型の比較表

項目整数型(int)実数型(float / double)
扱える値小数なしの整数小数ありの実数(近似)
精度高い小数点以下に誤差あり
使用ビット数32ビットなどfloat(32ビット)、double(64ビット)
精度の上限±2,147,483,647約7桁(float)/約15桁(double)
丸め誤差の可能性なしあり

例え話:電卓 vs 紙の計算

コンピュータの実数型は、ちょっと高性能な電卓みたいなものです。
電卓では「π」ボタンを押せば3.1415927...という数が出てきますが、それは「厳密なπ」ではありませんよね。

一方、数学での「実数」は、紙に書いて永遠に桁を追っていける理想の数です。

つまり、電卓(コンピュータ)は「近いけど完全ではない世界」を生きているのです。


数式で表すと?

例えば、次のような数式を考えてみましょう:

f(x) = x ÷ 3

これは数式としては無限小数になります。

読み方:エフ エックス イコール エックス わる 3

しかし、プログラムで x = 10 を入れても f(x)3.333333 のように丸められた結果になります。


最後に:どう学んでいくといいの?

  1. 実数型は「近似値」であることをしっかり理解する
  2. 整数の扱いは整数型で、誤差が許されない場合は注意して選ぶ
  3. 浮動小数点誤差(丸め誤差)に注意するクセをつける
  4. 精度が求められる場合は「任意精度計算ライブラリ(BigDecimalなど)」の検討も

数の世界は一見シンプルに見えて、プログラムの中に入ると途端に奥深くなります。
「本当の数」と「コンピュータ上の数」の違いに敏感になることが、より良いプログラマーへの第一歩です。

次は、「浮動小数点数の誤差が生まれる具体的なメカニズム」や、「精度を保つための工夫」について掘り下げてみても良いかもしれません。

どんどん学んで、深掘りしていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。