IEEE(3M) — UNIX Programmer’s Manual
名称
copysign, drem, finite, logb, scalb − 符号変更、剰余、指数の操作
形式
#include <math.h>
double copysign(x,y)
double x,y;
double drem(x,y)
double x,y;
int finite(x)
double x;
double logb(x)
double x;
double scalb(x,n)
double x;
int n;
解説
これらの関数は、 IEEE754 規格に決められた、 あるいは推奨されている 浮動小数点演算用のルーチンです。
copysign(x,y)は、 y と同じ符号に変更した x を 返します。
drem(x,y)は、 剰余 r := x − n∗y を 返します。 ここで n は x/y の正確な値に最も近い整数です。 さらに、 |n−x/y|=1/2 の場合には、 n は偶数になります。 したがって、 剰余は正確に計算された |r| ≤ |y|/2 です。 ただし、 drem(x,0) は例外です。 以下の診断の項を 参照してください。
Finit (x)= 1 −∞ < x < +∞ のとき
= 0 それ以外 (|x|=∞ のとき、または x がNaN)
logb(x) は x の指数を 返します。 これは、 倍精度浮動小数点数の表現形式に変換された符号付き整数で、 x=0 ではないとき、 |x| = ∞ ではないとき、 または x が 0 とアンダフローの限界値の間にあるとき以外は、 1 ≤ |x|/2∗∗n < 2 が選択されます。 以下のバグの項を 参照してください。
scalb(x,n) = x∗(2∗∗n) が整数の n に対して計算されます。 最初に 2∗∗n が計算されることはありません。
診断
IEEE 754 は、 drem(x,0) と drem(∞,y) は NaN を 生成する不適当な演算と定義しています。
IEEE 754 は、 logb(±∞) = +∞ and logb(0) = −∞, を定義し、 後者にはゼロ除算のシグナルを 発生するように定められています。
関連事項
floor(3M), math(3M), infnan(3M)
著者
Kwok−Choi Ng
バグ
IEEE 754 は現在のところ、 logb(正規化されていない数) = logb(正規化表現の最小数>0) を 指定していますが、 IEEE p854 の新しい要請にある仕様に変更しつつあります。 すなわち logb(x) は、 0、 ∞ 、 および NaN 以外のすべての x に対して、
1 ≤ scalb(|x|,−logb(x)) < Radix ... = 2 (IEEE 754 の場合)
を 満たします。 754 の仕様を 仮定するプログラムはほとんどすべて、 logb が 854 の仕様に従う場合でも、 正しく動作します。
IEEE 754 は copysign(x, NaN) = ±x を 要求しますが、 NaN の符号については、 何も指定していません。
NEWS-OSRelease 3.3