C言語,frexp()関数で浮動小数点実数を仮数と指数に分解する

スポンサーリンク

鍛錬 706

C言語,frexp()関数で浮動小数点実数を仮数と指数に分解する

浮動小数点実数を仮数部(正規化小数)と指数部に分解するには、frexp()関数を使用します。
 
以下は、frexp()関数についてです。

#include <math.h>

double frexp(double x, int *exp);
 

引数

以下は、上記の引数についてです。

引数 意味
double x 分解対象の数値
int *exp 分解後の指数部

戻り値

以下は、戻り値についてです。

戻り値である仮数部(正規化小数)は、2 の累乗を乗算すると引数の x となる値(x が 0 ではない場合)が返されます。

\(x = 仮数部 * 2^{exp}\)
戻り値
double 分解後の仮数部(正規化小数)
スポンサーリンク

プログラム

以下は、浮動小数点実数を仮数部(正規化小数)と指数部に分解するプログラム、get_frexp.c です。

今回は、64.0 を仮数部(正規化小数)と指数部に分解しています。

\(64.0 = ? * 2^{?}\)
// include
#include <stdio.h>
#include <math.h>

// main
int main(void)
{
	double num;
	double mantissa;
	int exponent;
	
	// 分割対象の数値を格納
	num = 64.0;
	
	// 浮動小数点実数を仮数部と指数部に分解
	mantissa = frexp(num, &exponent);
	
	printf("仮数部 = %lf\n", mantissa);
	printf("指数部 = %d\n", exponent);
	printf("-------------------------------------\n");
	printf("%.1lf = %lf * 2^%d\n", num, mantissa, exponent);
	
	return 0;
}
スポンサーリンク

実行結果

以下は、プログラム get_frexp.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra get_frexp.c -lm -o get_frexp
***@ubuntu:~/***/test/c$ ./get_frexp
仮数部 = 0.500000
指数部 = 7
-------------------------------------
64.0 = 0.500000 * 2^7

 
上記に示した通り、64.0 の仮数部(正規化小数)は 0.5、指数部は 7 であることが分かりました。

\(64.0 = 0.5 * 2^{7}\)
タイトルとURLをコピーしました