double
日本語 | 倍精度浮動小数点型 |
英語 | double |
ふりがな | だぶる |
フリガナ | ダブル |
プリミティブ型のひとつ。
実数値を格納するための型。
ラッパークラスはDoubleクラス。
「1.5」のような、小数点を含む数を格納するための型。
64ビット(8バイト)の情報量を持ち、浮動小数点形式で実数を格納する。
64ビットの内訳は以下の通り(左端のビットを「0ビット目」とする)。
・0ビット目:符号
・1ビット目~11ビット目:指数部
・12ビット目~63ビット目:仮数部
それぞれの意味については「浮動小数点」「指数部」「仮数部」の項目を参照。
正の最大値は「1.7976931348623157*10の308乗」、正の最小値は「4.9*10の-324乗」となる。ただしこれらは、指数部、仮数部それぞれの「表現できる最大の値・最小の値」である。
また、これらは共に「正の~」であり、0ビット目の符号を1にすれば、どちらもマイナスの値となる。
浮動小数点の性質上、値によっては誤差が生まれる。
金額の計算等、正確な実数値が必要な場合にはBigDecimalクラスの使用を勧める。
ちなみに「ダブル」という名称は、float型の倍のサイズ、という点から付けられている。詳しくは「倍精度浮動小数点型」の項目を参照。
実数値を格納するための型。
ラッパークラスはDoubleクラス。
「1.5」のような、小数点を含む数を格納するための型。
64ビット(8バイト)の情報量を持ち、浮動小数点形式で実数を格納する。
64ビットの内訳は以下の通り(左端のビットを「0ビット目」とする)。
・0ビット目:符号
・1ビット目~11ビット目:指数部
・12ビット目~63ビット目:仮数部
それぞれの意味については「浮動小数点」「指数部」「仮数部」の項目を参照。
正の最大値は「1.7976931348623157*10の308乗」、正の最小値は「4.9*10の-324乗」となる。ただしこれらは、指数部、仮数部それぞれの「表現できる最大の値・最小の値」である。
また、これらは共に「正の~」であり、0ビット目の符号を1にすれば、どちらもマイナスの値となる。
浮動小数点の性質上、値によっては誤差が生まれる。
金額の計算等、正確な実数値が必要な場合にはBigDecimalクラスの使用を勧める。
ちなみに「ダブル」という名称は、float型の倍のサイズ、という点から付けられている。詳しくは「倍精度浮動小数点型」の項目を参照。
// Sample.java
import java.text.DecimalFormat;
public class Sample
{
public static void main( String[] args )
{
// double型の変数宣言します。実数値「2.5」を格納します。
double d;
// メモリ上に64ビットの領域が確保されました。
// この変数に実数値2.5を格納します。
d = 2.5;
// それを出力します。
System.out.println( d );
// 2.5
// double型変数に格納された「2.5」がどのように
// ビットとして格納されているか見てみます。
outputDoubleBit( d );
// 0 10000000000 0100000000000000000000000000000000000000000000000000
// ↑←指数部 → ←仮数部 →
// 詳しくは「浮動小数点」「指数部」「仮数部」の項目を
// ご覧ください。
// 正の最大値と正の最小値はDoubleクラスのstaticフィールド
// として宣言されているのでそれを使いましょう。
d = Double.MAX_VALUE;
System.out.println( d );
DecimalFormat decimalFormat = new DecimalFormat( "0.0" );
System.out.println( decimalFormat.format( d ) );
outputDoubleBit( d );
// 1.7976931348623157E308
// 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0
// 0 11111111110 1111111111111111111111111111111111111111111111111111
d = Double.MIN_VALUE;
System.out.println( d );
decimalFormat = new DecimalFormat( "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
System.out.println( decimalFormat.format( d ) );
outputDoubleBit( d );
// 4.9E-324
// 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490
// 0 00000000000 0000000000000000000000000000000000000000000000000001
// ただし、ビットを見れば分かりますがどちらも「指数部と仮数部、
// それぞれ取りうる値」としての最大値と最小値です。正負は最初の
// ビットだけで決まるので、マイナスにすれば「負の~」となります。
// double型は浮動小数点なので、誤差には気を付けてください。
double d1 = 4.1;
double d2 = 8.2;
System.out.println( d1 + d2 );
// 12.299999999999999
// このように、簡単に誤差が生じます。
// 正確な値が必要な場合にはBigDecimalクラスを使用しましょう。
}
/**
* double型変数をビット形式で出力します。
*/
private static void outputDoubleBit( double d )
{
// double型変数をビット形式で文字列化します。
String source = Long.toBinaryString( Double.doubleToLongBits( d ) );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
// 符号、仮数部、指数部の間にスペースを入れます。
strbuf.insert( 12, " " );
strbuf.insert( 1, " " );
System.out.println( strbuf.toString() );
}
}
import java.text.DecimalFormat;
public class Sample
{
public static void main( String[] args )
{
// double型の変数宣言します。実数値「2.5」を格納します。
double d;
// メモリ上に64ビットの領域が確保されました。
// この変数に実数値2.5を格納します。
d = 2.5;
// それを出力します。
System.out.println( d );
// 2.5
// double型変数に格納された「2.5」がどのように
// ビットとして格納されているか見てみます。
outputDoubleBit( d );
// 0 10000000000 0100000000000000000000000000000000000000000000000000
// ↑←指数部 → ←仮数部 →
// 詳しくは「浮動小数点」「指数部」「仮数部」の項目を
// ご覧ください。
// 正の最大値と正の最小値はDoubleクラスのstaticフィールド
// として宣言されているのでそれを使いましょう。
d = Double.MAX_VALUE;
System.out.println( d );
DecimalFormat decimalFormat = new DecimalFormat( "0.0" );
System.out.println( decimalFormat.format( d ) );
outputDoubleBit( d );
// 1.7976931348623157E308
// 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0
// 0 11111111110 1111111111111111111111111111111111111111111111111111
d = Double.MIN_VALUE;
System.out.println( d );
decimalFormat = new DecimalFormat( "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
System.out.println( decimalFormat.format( d ) );
outputDoubleBit( d );
// 4.9E-324
// 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490
// 0 00000000000 0000000000000000000000000000000000000000000000000001
// ただし、ビットを見れば分かりますがどちらも「指数部と仮数部、
// それぞれ取りうる値」としての最大値と最小値です。正負は最初の
// ビットだけで決まるので、マイナスにすれば「負の~」となります。
// double型は浮動小数点なので、誤差には気を付けてください。
double d1 = 4.1;
double d2 = 8.2;
System.out.println( d1 + d2 );
// 12.299999999999999
// このように、簡単に誤差が生じます。
// 正確な値が必要な場合にはBigDecimalクラスを使用しましょう。
}
/**
* double型変数をビット形式で出力します。
*/
private static void outputDoubleBit( double d )
{
// double型変数をビット形式で文字列化します。
String source = Long.toBinaryString( Double.doubleToLongBits( d ) );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
// 符号、仮数部、指数部の間にスペースを入れます。
strbuf.insert( 12, " " );
strbuf.insert( 1, " " );
System.out.println( strbuf.toString() );
}
}
// Sample.java import java.text.DecimalFormat; public class Sample { public static void main( String[] args ) { // double型の変数宣言します。実数値「2.5」を格納します。 double d; // メモリ上に64ビットの領域が確保されました。 // この変数に実数値2.5を格納します。 d = 2.5; // それを出力します。 System.out.println( d ); // 2.5 // double型変数に格納された「2.5」がどのように // ビットとして格納されているか見てみます。 outputDoubleBit( d ); // 0 10000000000 0100000000000000000000000000000000000000000000000000 // ↑←指数部 → ←仮数部 → // 詳しくは「浮動小数点」「指数部」「仮数部」の項目を // ご覧ください。 // 正の最大値と正の最小値はDoubleクラスのstaticフィールド // として宣言されているのでそれを使いましょう。 d = Double.MAX_VALUE; System.out.println( d ); DecimalFormat decimalFormat = new DecimalFormat( "0.0" ); System.out.println( decimalFormat.format( d ) ); outputDoubleBit( d ); // 1.7976931348623157E308 // 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0 // 0 11111111110 1111111111111111111111111111111111111111111111111111 d = Double.MIN_VALUE; System.out.println( d ); decimalFormat = new DecimalFormat( "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ); System.out.println( decimalFormat.format( d ) ); outputDoubleBit( d ); // 4.9E-324 // 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490 // 0 00000000000 0000000000000000000000000000000000000000000000000001 // ただし、ビットを見れば分かりますがどちらも「指数部と仮数部、 // それぞれ取りうる値」としての最大値と最小値です。正負は最初の // ビットだけで決まるので、マイナスにすれば「負の~」となります。 // double型は浮動小数点なので、誤差には気を付けてください。 double d1 = 4.1; double d2 = 8.2; System.out.println( d1 + d2 ); // 12.299999999999999 // このように、簡単に誤差が生じます。 // 正確な値が必要な場合にはBigDecimalクラスを使用しましょう。 } /** * double型変数をビット形式で出力します。 */ private static void outputDoubleBit( double d ) { // double型変数をビット形式で文字列化します。 String source = Long.toBinaryString( Double.doubleToLongBits( d ) ); // 左0埋めします。 StringBuffer strbuf = new StringBuffer(); for( int iF1 = source.length(); iF1 < 64; ++iF1 ) { strbuf.append( "0" ); } strbuf.append( source ); // 符号、仮数部、指数部の間にスペースを入れます。 strbuf.insert( 12, " " ); strbuf.insert( 1, " " ); System.out.println( strbuf.toString() ); } }
「解説」に含まれているページ
「サンプルプログラムとか」に含まれているページ
- %=演算子
- %演算子
- *=演算子
- ++演算子
- +=演算子
- --演算子
- -=演算子
- /=演算子
- /演算子
- <<演算子
- =演算子
- >>>演算子
- >>演算子
- ]
- BigDecimal
- const
- double
- Double
- float
- NaN
- println
- strictfp
- whileステートメント
- ~演算子
- 「D」
- 「d」
- 「E」
- 「e」
- 「F」
- 「f」
- アンボクシング変換
- キャスト
- ナローイング変換
- バイアス
- プリミティブ型
- ボクシング変換
- メソッド呼び出し変換
- ラッパー
- リテラル
- リフレクション
- ワイドニング変換
- 乱数
- 二項演算子
- 代入変換
- 仮数部
- 倍精度浮動小数点型
- 割り算
- 単精度浮動小数点型
- 単項-演算子
- 四捨五入
- 引き算
- 指数部
- 掛け算
- 桁落ち
- 浮動小数点
- 浮動小数点リテラル
- 浮動小数点数リテラル
- 無理数
- 無限大
- 符号
- 精度
- 累乗
- 行列
- 足し算
- 配列初期化子