0
0

文字列の「1.」はdouble型でいいのか!正体を暴く ~ 実は1.0ってほんと?!~

Posted at

"1." の正しい解釈 〜 演算の世界のミステリー 〜

さて、皆さん。コンピュータの世界には、どうにも解せぬ不思議が存在します。
今回のミステリーは、なんと「1.」という数値リテラルです。
この「1.」を目の前にしたとき、あなたならどうしますか?

  1. エラーにする?
  2. それとも、 1 として解釈する?
  3. いやいや、1.0 ?

さて、この謎に迫るため、冒険の旅に出ましょう。
まずは、我らが頼りにするPOSIXの地図を開きますが...
おや、数値に関する定義が見当たらないではありませんか!
これは、どうやら他の宝の地図を参照する必要がありそうです。

探求の旅:C言語とC++言語の遺跡

次に我々は古の文献、すなわちC言語とC++言語の標準規格へと足を踏み入れます。
そこで見つけたのは、まさに宝の地図そのもの。
ISO/IEC 9899(C言語)と ISO/IEC 14882(C++言語)の神殿に、次のように刻まれていました。

fractional-constant:
    digit-sequence[opt] . digit-sequence
    digit-sequence .

真実の解明

この古代の呪文を解読すると、次のことがわかりました。

  1. digit-sequence[opt] . digit-sequence: これが示すのは、小数部を伴う数値の姿。
  2. digit-sequence .: そしてこちらは、小数点で終わる数値の姿。

おお、これはまさに「1.」が有効な数値リテラルである証拠。
つまり、「1.」は1.0という浮動小数点数として解釈されるべきなのです。
同じように、「.1」は0.1という浮動小数点数として解釈されるのです。

勇者たちの証言

さて、冒険者たちが訪れるオアシス、cppreference.comとIBMの文献にも同じ記述がありました:

これらの証言により、冒険の成果は確かなものとなりました。

終わりに

こうして、「1.」という数値リテラルの謎は解き明かされました。
もはやこの数値を見ても惑わされることはありません。
そう、これはエラーでも整数でもなく、まさに1.0という浮動小数点数として認識されるべきなのです。

次回の冒険では、どんなミステリーが待ち受けているのか...。
それはまた、別の機会に!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0