Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

floor(3M)

math(3M)

infnan(3M)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026