Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

2.2.7 Oracle Solaris 環境での基数変換

基数変換とは、ある基数で表された数値を別の基数で表された数値に変換することを指します。 C の printfscanf や、Fortran の readwriteprint などの I/O ルーチンでは、基数 2 と基数 10 で表された数値間の基数変換が必要になります。

  • 基数 10 から基数 2 への基数変換は、従来の 10 進数表記の数値を読み込み、それを内部の 2 進数形式で格納する場合に発生します。

  • 基数 2 から基数 10 への基数変換は、内部の 2 進数値を 10 進数の ASCII 文字列として出力する場合に発生します。

Oracle Solaris 環境では、すべての言語での基数変換のための基本的なルーチンが標準 C ライブラリ libc に含まれています。これらのルーチンは、関係する 10 進数の文字列の長さに対するわずかな制限に従って、すべての入力および出力形式間の正しく丸められた変換を生み出すテーブル駆動アルゴリズムを使用しています。テーブル駆動アルゴリズムでは、その正確性に加えて、正しく丸められた基数変換のための最悪条件での時間が削減されます。

1985 IEEE 規格では、10–44 から 10+44 までの範囲の大きさを持つ標準的な数値での正しい丸めが必要ですが、それを超える指数の場合は多少間違った丸めが許可されます。IEEE 規格 754 のセクション 5.6 を参照してください。libc のテーブル駆動アルゴリズムは、改訂された 754-2008 の要求どおり、単精度、倍精度、および拡張倍精度形式の範囲全体にわたって正しく丸めます。

C では、10 進数文字列と 2 進浮動小数点値の間の変換は、IEEE 754 に従って常に正しく丸められます。変換された結果は、現在の丸めモードによって指定された方向で元の値にもっとも近い、結果の形式で表すことができる数値です。丸めモードがもっとも近い値への丸めであり、かつ元の値が結果の形式の 2 つの表現可能な数値の間に正確に存在する場合、変換された結果は最下位の桁が偶数である方になります。これらの規則は、コンパイラによって実行されるソースコード内の定数の変換や、標準のライブラリルーチンを使用してプログラムによって実行されるデータの変換に適用されます。

Fortran では、デフォルトでは、10 進数文字列と 2 進浮動小数点値の間の変換は C と同じ規則に従って正しく丸められます。I/O 変換の場合、もっとも近い値への丸めモードの「偶数に結び付ける丸め」の規則は、プログラムで ROUNDING= 指定子を使用するか、または –iorounding フラグでコンパイルすることによってオーバーライドできます。詳細は、Oracle Solaris Studio 12.4: Fortran ユーザーズガイド および f95(1) のマニュアルページを参照してください。

基数変換に関するリファレンス (特に Coonen 氏の論文や Sterbenz 氏の書籍) については、Appendix F, 参考資料 を参照してください。