"1." の正しい解釈 〜 演算の世界のミステリー 〜
さて、皆さん。コンピュータの世界には、どうにも解せぬ不思議が存在します。
今回のミステリーは、なんと「1.」という数値リテラルです。
この「1.」を目の前にしたとき、あなたならどうしますか?
- エラーにする?
- それとも、 1 として解釈する?
- いやいや、1.0 ?
さて、この謎に迫るため、冒険の旅に出ましょう。
まずは、我らが頼りにするPOSIXの地図を開きますが...
おや、数値に関する定義が見当たらないではありませんか!
これは、どうやら他の宝の地図を参照する必要がありそうです。
探求の旅:C言語とC++言語の遺跡
次に我々は古の文献、すなわちC言語とC++言語の標準規格へと足を踏み入れます。
そこで見つけたのは、まさに宝の地図そのもの。
ISO/IEC 9899(C言語)と ISO/IEC 14882(C++言語)の神殿に、次のように刻まれていました。
fractional-constant:
digit-sequence[opt] . digit-sequence
digit-sequence .
真実の解明
この古代の呪文を解読すると、次のことがわかりました。
-
digit-sequence[opt] . digit-sequence
: これが示すのは、小数部を伴う数値の姿。 -
digit-sequence .
: そしてこちらは、小数点で終わる数値の姿。
おお、これはまさに「1.」が有効な数値リテラルである証拠。
つまり、「1.」は1.0という浮動小数点数として解釈されるべきなのです。
同じように、「.1」は0.1という浮動小数点数として解釈されるのです。
勇者たちの証言
さて、冒険者たちが訪れるオアシス、cppreference.comとIBMの文献にも同じ記述がありました:
これらの証言により、冒険の成果は確かなものとなりました。
終わりに
こうして、「1.」という数値リテラルの謎は解き明かされました。
もはやこの数値を見ても惑わされることはありません。
そう、これはエラーでも整数でもなく、まさに1.0という浮動小数点数として認識されるべきなのです。
次回の冒険では、どんなミステリーが待ち受けているのか...。
それはまた、別の機会に!