logb()、logbf()、logbl() - 非バイアス化指数

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
C99
Single UNIX Specification、バージョン 3
C++ TR1 C99

両方 logbf()、logbl() の場合は z/OS® V1R7

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <math.h>

double logb(double x);
C99:
#define _ISOC99_SOURCE
#include <math.h>

float logbf(float x);
long double logbl(long double x);
C++ TR1 C99:
#define _TR1_C99
#include <math.h>

float logb(float x); 
long double logb(long double x);

機能説明

浮動小数点モードの符号付き整数値として、引数 x の指数を戻します。x が非正規の場合は、正規化された数値として扱われます。
注: 下表は、これらの関数の実行可能な形式を示しています。 IEEE 2 進数浮動小数点の詳細は、IEEE 2 進数浮動小数点を参照してください。
関数 Hex IEEE
logb X X
logbf X X
logbl X X

戻り値

正常に実行された場合、logb() は x の指数を戻します。

logb() は、x が 0.0 だと失敗します。その場合、logb() は -HUGE_VAL を戻し、errno に EDOM を設定します。

/*
 * This program illustrates the use of logb() function
 *
 */
#define _ISOC99_SOURCE
#include <math.h>
#include <float.h>  /* Needed for FLT_RADIX */
#include <stdio.h>


void main() {

  int i;
  union {
    double number;
    unsigned char  uchars [sizeof(double)];
  } dblval;
  double logbx;

  printf("Illustrates the logb() function");

  #ifdef __BFP__
    printf(" (IEEE version)¥n¥n");
  #else
    printf(" (HFP version)¥n¥n");
  #endif

  /* generate the smallest possible double number */
  for (i=0; i<sizeof(double); i++)
    dblval.uchars[i] = 0;
  dblval.uchars[1] = 0x10;

  logbx = logb(dblval.number);

  printf("x = %g¥n",dblval.number);
  printf("logb(x) = %f¥n¥n", logbx);

  printf("pow(FLT_RADIX, logb(x) ) should equal x¥n");
  printf("pow(%d,%f) = %g¥n",FLT_RADIX, logbx, pow(FLT_RADIX, logbx));
}

出力:

Illustrates the logb() function (IEEE version)

x = 2.22507e-308
logb(x) = -1022.000000

pow(FLT_RADIX, logb(x) ) should equal x
pow(2,-1022.000000) = 2.22507e-308

関連情報