「3.10.2. 浮動小数点リテラル」の編集履歴(バックアップ)一覧に戻る

3.10.2. 浮動小数点リテラル - (2012/09/04 (火) 23:11:41) のソース

*[[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文字&tt(){e}または&tt(){E}が先頭に付いた符号付き整数で表します。

16進数浮動小数点リテラルでは、少なくとも1桁の数(整数部もしくは小数部に)の他に指数部が必須です。型を表す接尾語は省略可能です。指数部はASCII文字&tt(){p}または&tt(){P}が先頭に付いた符号付き整数で表します。

アンダースコアを整数部や小数部や指数部の数字を区切るのに使用できます。 

#divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){

&i(){FloatingPointLiteral}:
  &i(){DecimalFloatingPointLiteral}
  &i(){HexadecimalFloatingPointLiteral}

&i(){DecimalFloatingPointLiteral}:
  &i(){Digits} &tt(){.} &i(){Digits&sub(){opt}} &i(){ExponentPart&sub(){opt}} &i(){FloatTypeSuffix&sub(){opt}}
  &tt(){. &i(){Digits} &i(){ExponentPart&sub(){opt}} &i(){FloatTypeSuffix&sub(){opt}}
  &i(){Digits &i(){ExponentPart} &i(){FloatTypeSuffix&sub(){opt}}
  &i(){Digits &i(){ExponentPart&sub(){opt}} &i(){FloatTypeSuffix}

&i(){ExponentPart}:
  &i(){ExponentIndicator} &i(){SignedInteger}

&i(){ExponentIndicator}: one of
  &tt(){e} &tt(){E}

&i(){SignedInteger}:
  &i(){Sign&sub(){opt}} &i(){Digits}

&i(){Sign}: one of
  &tt(){+} &tt(){-}

&i(){FloatTypeSuffix}: one of
  &tt(){f F d D}

&i(){HexadecimalFloatingPointLiteral}:
  &i(){HexSignificand} &i(){BinaryExponent} &i(){FloatTypeSuffix&sub(){opt}}

&i(){HexSignificand}:
  &i(){HexNumeral}
  &i(){HexNumeral} &tt(){.}
  &tt(){0} &tt(){x} &i(){HexDigits&sub(){opt}} &tt(){.} &i(){HexDigits}
  &tt(){0} &tt(){X} &i(){HexDigits&sub(){opt}} &tt(){.} &i(){HexDigits}

&i(){BinaryExponent}:
  &i(){BinaryExponentIndicator} &i(){SignedInteger}

&i(){BinaryExponentIndicator}:one of
  &tt(){p} &tt(){P}

}

浮動小数点リテラルはASCII文字&tt(){F}か&tt(){f}が末尾に付く場合は&tt(){float}型となります。ASCII文字&tt(){D}か&tt(){d}が付くもしくはなにも付かない場合はDouble型になります。

&tt(){float}型、&tt(){double}型が表す値はそれぞれIEEE754の32ビット単精度浮動小数点、64ビット倍精度浮動小数点を表します。

&i(){&small(){浮動小数点数のUnicode文字列表現からIEEE754の2進浮動小数点の内部表現に適切に変換する処理の詳細はパッケージ&tt(){java.lang}の&tt(){Float}クラスや&tt(){Double}クラスのメソッド&tt(){valueOf}を参照してください。}}

&tt(){float}型の最大の正の有限のリテラルは3.4028235e38fです。

&tt(){float}型の最小の正の有限の非ゼロのリテラルは1.40e-45fです。

&tt(){double}型の最大の正の有限のリテラルは1.7976931348623157e308です。

&tt(){double}型の最小の正の有限の非ゼロのリテラルは4.9e-324です。

&bold(){非ゼロの浮動小数点リテラルが大きすぎる場合、丸め変換により内部表現がIEEE754無限大となるためコンパイルエラーとなります。}

プログラムでコンパイルエラーを出さずに無限大を扱うには定型式である&tt(){1f/0f}や&tt(){-1d/0d}を用いるか、&tt(){Float}クラスや&tt(){Double}クラスの組込み定数&tt(){POSITIVE_INFINITY}や&tt(){NEGATIVE_INIFINITY}を使用します。

&bold(){非ゼロの浮動小数点リテラルが小さすぎる場合、丸め変換により内部表現がゼロとなるためコンパイルエラーとなります。}

非ゼロの浮動小数点リテラルが小さい値の場合でも丸め変換により内部表現が非ゼロの非正規化数となる場合はコンパイルエラーとはなりません。

非数値(Not-a-Number value)を表すには&tt(){Float}クラスや&tt(){Double}クラスの組込み定数&tt(){Float.NaN}や&tt(){Double.NaN}を使用します。

#divstyle(background-color:#f0f0ff;border:1px solid black;padding 4px){

&tt(){float}型リテラルの例: 
 1e1f  2.f  .3f  0f  3.14f  6.022137e+23f

&tt(){double}型リテラルの例: 
 1e1  2.  .3  0.0  3.14  1e-9d  1e137

}

***[[3.10.3. ブールリテラル]]
***[[3.10.4. 文字リテラル]]
***[[3.10.5. 文字列リテラル]]
***[[3.10.6. 文字・文字列リテラル用のエスケープシーケンス]]
***[[3.10.7. ヌルリテラル]]
**[[3.11. 分離子]]
**[[3.12. 演算子]]
人気記事ランキング
目安箱バナー