frexpf.c
1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
=============================================================================
Copyright (C) 1997-1999 NINTENDO Co.,Ltd.
$RCSfile: frexpf.c,v $
$Revision: 1.1.1.1 $
$Date: 2002/10/30 02:07:09 $
=============================================================================
関数名:frexp
-----------------------------------------------------------------------------
書式: #include <math.h>
float frexpf(float x, int *expptr);
引数: x 元の数値
expptr x = m * (2^n) の n の値を格納するポインタ
戻り値:x = m * (2^n) の m の値を返す
説明: x = m * (2^n) の式を満たす m と n を求める。
ただし、m の絶対値は、1.0 より小さくかつ 0.5 より大きい。
-----------------------------------------------------------------------------
*/
#include "math.h"
float frexpf(float x, int *expptr)
{
int a;
float b, c;
if (!x) {
*expptr = 0;
return 0;
}
a = 1;
if (x<0) b = -x;
else b = x;
c = b;
if (b > 0.5) {
while(c>=b) b = powf(2, a++);
a --;
} else {
while(c<=b) c = powf(2, (a--)-2);
b = powf(2, a);
}
*expptr = a;
return x / b;
}