前回が整数だったので、今回は浮動小数点数リテラルを取り上げます。
まずは、その定義からお見せします。
- 浮動小数点リテラル
- 十進数字列+ (‘.’ 十進数字列*)? 指数部?
- ‘.’ 十進数字列+ 指数部?
- 指数部
- (‘e’ | ‘E’) 符号? 十進数字列
- 符号
- ‘+’ | ‘-‘
これを書くに当たって、次のコードを試しました。なお、コメントアウトした部分は、全てコンパイルエラーになりました。
Dim x As Double x = 123.45 x = 123. x = .45 x = 123.45e6 x = 123.e6 x = 123e6 x = .45e6 x = 123.45e+6 x = 123.45e-6 x = 123.45E6 /* '型宣言文字付 x = 123.45% x = 123.45& x = 123.45! x = 123.45# '倍精度指定指数表記 x = 123.45d6 x = 123.45d+6 x = 123.45d-6 '十六進浮動小数点数表記 x = &h123.45p6 x = &h123.45p+6 x = &h123.45p-6 x = &h123p6 */
N88, Quick, Visual Basicでは、型宣言文字をこのように浮動小数点数リテラル(と整数リテラル)にも付加できます。倍精度指定付指数表記というのは、今回でっち上げた言葉ですが、指数文字にdを使うのとそのリテラルは倍精度になるという規定がN88-Basicにはあったようです。
十六進浮動小数点表記は、密かなる提案です。C99やDでは、0x123.45p6
のような表記があります。このうちp以下が指数です。浮動小数点数の内部表現が二進法なのだから、リテラルを十六進法で表記すれば、処理系などの違いで変換誤差が異なるという事態が生じることを防げるという利点があるようです。
123.や.45のような小数点の前後どちらかを省略した記法は、C/C++では確かに構文上存在するので使っていましたが、ABではできないと決め付け、避けていました。しかし、今回コンパイラが受け付けることがわかったので、今度から使おうと思います。
スポンサード リンク |