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 */