akios @ ウィキ
3.10.2. 浮動小数点リテラル
最終更新:
akios
-
view
3. 字句構造
3.1. Unicode
3.2. 字句変換
3.3. Unicodeエスケープ
3.4. 行終端子
3.5. 入力要素とトークン
3.6. 空白
3.7. コメント
3.8. 識別子
3.9. キーワード
3.10. リテラル
3.10.1. 整数リテラル
3.10.2. 浮動小数点リテラル
浮動小数点リテラル(floating-point literal)は整数部、10進もしくは16進小数点(ASCIIピリオド文字)、小数部、指数部、型を表す接尾語より構成されています。
浮動小数点リテラルは10進もしくは16進で表すことができます。
10進浮動小数点リテラルでは、少なくとも1桁の数(整数部もしくは小数部に)の他に10進小数点、指数部、型を表す接尾語のいずれか1つが必要です。それ以外の要素は省略可能です。指数部が存在するなら、ASCII文字eまたはEが先頭に付いた符号付き整数で表します。
16進数浮動小数点リテラルでは、少なくとも1桁の数(整数部もしくは小数部に)の他に指数部が必須です。型を表す接尾語は省略可能です。指数部はASCII文字pまたはPが先頭に付いた符号付き整数で表します。
アンダースコアを整数部や小数部や指数部の数字を区切るのに使用できます。
FloatingPointLiteral:
DecimalFloatingPointLiteral
HexadecimalFloatingPointLiteral
DecimalFloatingPointLiteral
HexadecimalFloatingPointLiteral
DecimalFloatingPointLiteral:
Digits . Digitsopt ExponentPartopt FloatTypeSuffixopt
. Digits ExponentPartopt FloatTypeSuffixopt
Digits ExponentPart FloatTypeSuffixopt
Digits ExponentPartopt FloatTypeSuffix
Digits . Digitsopt ExponentPartopt FloatTypeSuffixopt
. Digits ExponentPartopt FloatTypeSuffixopt
Digits ExponentPart FloatTypeSuffixopt
Digits ExponentPartopt FloatTypeSuffix
ExponentPart:
ExponentIndicator SignedInteger
ExponentIndicator SignedInteger
ExponentIndicator: one of
e E
e E
SignedInteger:
Signopt Digits
Signopt Digits
Sign: one of
+ -
+ -
FloatTypeSuffix: one of
f F d D
f F d D
HexadecimalFloatingPointLiteral:
HexSignificand BinaryExponent FloatTypeSuffixopt
HexSignificand BinaryExponent FloatTypeSuffixopt
HexSignificand:
HexNumeral
HexNumeral .
0 x HexDigitsopt . HexDigits
0 X HexDigitsopt . HexDigits
HexNumeral
HexNumeral .
0 x HexDigitsopt . HexDigits
0 X HexDigitsopt . HexDigits
BinaryExponent:
BinaryExponentIndicator SignedInteger
BinaryExponentIndicator SignedInteger
BinaryExponentIndicator:one of
p P
p P
浮動小数点リテラルはASCII文字Fかfが末尾に付く場合はfloat型となります。ASCII文字Dかdが付くもしくはなにも付かない場合はDouble型になります。
float型、double型が表す値はそれぞれIEEE754の32ビット単精度浮動小数点、64ビット倍精度浮動小数点を表します。
浮動小数点数のUnicode文字列表現からIEEE754の2進浮動小数点の内部表現に適切に変換する処理の詳細はパッケージjava.langのFloatクラスやDoubleクラスのメソッドvalueOfを参照してください。
float型の最大の正の有限のリテラルは3.4028235e38fです。
float型の最小の正の有限の非ゼロのリテラルは1.40e-45fです。
double型の最大の正の有限のリテラルは1.7976931348623157e308です。
double型の最小の正の有限の非ゼロのリテラルは4.9e-324です。
非ゼロの浮動小数点リテラルが大きすぎる場合、丸め変換により内部表現がIEEE754無限大となるためコンパイルエラーとなります。
プログラムでコンパイルエラーを出さずに無限大を扱うには定型式である1f/0fや-1d/0dを用いるか、FloatクラスやDoubleクラスの組込み定数POSITIVE_INFINITYやNEGATIVE_INIFINITYを使用します。
非ゼロの浮動小数点リテラルが小さすぎる場合、丸め変換により内部表現がゼロとなるためコンパイルエラーとなります。
非ゼロの浮動小数点リテラルが小さい値の場合でも丸め変換により内部表現が非ゼロの非正規化数となる場合はコンパイルエラーとはなりません。
非数値(Not-a-Number value)を表すにはFloatクラスやDoubleクラスの組込み定数Float.NaNやDouble.NaNを使用します。
float型リテラルの例:
1e1f 2.f .3f 0f 3.14f 6.022137e+23f
double型リテラルの例:
1e1 2. .3 0.0 3.14 1e-9d 1e137