frexpf.c 1.19 KB
/*
=============================================================================
        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;
}