JavaA2Z

KAB-studio > プログラミング > JavaA2Z > doubleとは

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の倍のサイズ、という点から付けられている。詳しくは「倍精度浮動小数点型」の項目を参照

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// 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();
        forint 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() );
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/04/13
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。