JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 無理数とは

無理数

日本語 無理数
英語 irrational number
ふりがな むりすう
フリガナ ムリスウ

解説

「a / b」(a、b共に整数)で表現できない実数のこと。
整数同士の分数で表現できない実数のことを「無理数」と言う。
ルート2」等のこと。
対して、「a / b」で表現できる実数を「有理数」と言う。
 
浮動小数点において丸め誤差が発生するのは、特定の10進数数値が仮数部の計算にとって無理数だからである。
仮数部は、指数部の値を2で割ることによって、指数部の間の数を表現する。つまり仮数部という「分数」によって、10進数の様々な値を表現しようとする。
だが、たとえば「1.1」という値のように、指数部を2で割り続けても表現できない値が存在する。これはつまり、仮数部の分数では表現できない値であり、つまり「無理数」だからである。そのような値は表現できないため丸め誤差が発生する。

参考サイト

  • (参考サイトはありません)

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

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

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 浮動小数点で実数を表現する場合の、ビットの状態。
        outputDoubleBit( 1.0 );
        outputDoubleBit( 1.25 );
        outputDoubleBit( 1.5 );
        // 0 01111111111 0000000000000000000000000000000000000000000000000000
        // 0 01111111111 0100000000000000000000000000000000000000000000000000
        // 0 01111111111 1000000000000000000000000000000000000000000000000000

        // このように、2の分数で表現できる10進数は正確に表現できます。
        // ですが、2の分数で表現できないと、丸め誤差が発生します。

        outputDoubleBit( 1.1 );
        // 0 01111111111 0001100110011001100110011001100110011001100110011010
        // この値は「1.1の近似値」であり、正確には「1.1」ではありません。
        // これが丸め誤差です。
    }

    /**
    *   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
public class Sample
{
    public static void main( String[] args )
    {
        // 浮動小数点で実数を表現する場合の、ビットの状態。
        outputDoubleBit( 1.0 );
        outputDoubleBit( 1.25 );
        outputDoubleBit( 1.5 );
        // 0 01111111111 0000000000000000000000000000000000000000000000000000
        // 0 01111111111 0100000000000000000000000000000000000000000000000000
        // 0 01111111111 1000000000000000000000000000000000000000000000000000

        // このように、2の分数で表現できる10進数は正確に表現できます。
        // ですが、2の分数で表現できないと、丸め誤差が発生します。

        outputDoubleBit( 1.1 );
        // 0 01111111111 0001100110011001100110011001100110011001100110011010
        // この値は「1.1の近似値」であり、正確には「1.1」ではありません。
        // これが丸め誤差です。
    }

    /**
    *   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:2005/12/07
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。