Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

IEEE 2 進浮動小数点の ROUND

IEEE 2 進浮動小数点の結果の精度は、ソースの引数の精度と同じです。

コンパイラー・オプション USAGE(ROUND(IBM)) のもとでは、z/OS 上以外、結果の値はソースと同じになります。ここで、ソースがゼロでない場合は、結果は、ソースの右端ビットで定まることによって得られます。

コンパイラー・オプション USAGE(ROUND(ANS)) のもとでは、結果の値は次の式によって得られます。ここで、b = 2 (=radix(x)) で、e = exponent(x) です。

round(x,n) = sign(x)*(b(e-n))* floor(abs(x)* (b(n-e)) + 1/2)

USAGE(ROUND(ANS)) のもとでは、丸めは基数 2 の丸めであり、認識の甘いユーザーが予測したものと異なる結果が出ることがあります。 例えば、USAGE(ROUND(ANS)) でコンパイルされ、IEEE 2 進浮動小数点命令が使用された場合は、以下の連続した 3.1415926do の丸めにより、次の値が算出されます。

    dcl x float bin(53) init( 3.1415926d0 );

    display( round(x,1) );  /* 4.000000000000000E+0000 */
    display( round(x,2) );  /* 3.000000000000000E+0000 */
    display( round(x,3) );  /* 3.000000000000000E+0000 */
    display( round(x,4) );  /* 3.250000000000000E+0000 */
    display( round(x,5) );  /* 3.125000000000000E+0000 */
    display( round(x,6) );  /* 3.125000000000000E+0000 */
    display( round(x,7) );  /* 3.156250000000000E+0000 */

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)