⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_frexp.c

📁 Newlib 嵌入式 C库 标准实现代码
💻 C
字号:
/* @(#)z_frexp.c 1.0 98/08/13 *//*FUNCTION       <<frexp>>, <<frexpf>>---split floating-point numberINDEX        frexpINDEX        frexpfANSI_SYNOPSIS        #include <math.h>        double frexp(double <[val]>, int *<[exp]>);        float frexpf(float <[val]>, int *<[exp]>);TRAD_SYNOPSIS        #include <math.h>        double frexp(<[val]>, <[exp]>)        double <[val]>;        int *<[exp]>;        float frexpf(<[val]>, <[exp]>)        float <[val]>;        int *<[exp]>;DESCRIPTION        All nonzero, normal numbers can be described as <[m]> * 2**<[p]>.        <<frexp>> represents the double <[val]> as a mantissa <[m]>        and a power of two <[p]>. The resulting mantissa will always        be greater than or equal to <<0.5>>, and less than <<1.0>> (as        long as <[val]> is nonzero). The power of two will be stored        in <<*>><[exp]>.@ifnottex<[m]> and <[p]> are calculated so that<[val]> is <[m]> times <<2>> to the power <[p]>.@end ifnottex@tex<[m]> and <[p]> are calculated so that$ val = m \times 2^p $.@end tex<<frexpf>> is identical, other than taking and returningfloats rather than doubles.RETURNS<<frexp>> returns the mantissa <[m]>. If <[val]> is <<0>>, infinity,or Nan, <<frexp>> will set <<*>><[exp]> to <<0>> and return <[val]>.PORTABILITY<<frexp>> is ANSI.<<frexpf>> is an extension.*//***************************************************************** * frexp * * Input: *   d   - floating point value *   exp - exponent value * * Output: *   A floating point value in the range [0.5, 1). * * Description: *   This routine breaks a floating point value into a number f and *   an exponent exp such that d = f * 2 ^ exp. * *****************************************************************/#include "fdlibm.h"#include "zmath.h"#ifndef _DOUBLE_IS_32BITSdouble frexp (double d, int *exp){  double f;  __uint32_t hd, ld, hf, lf;  /* Check for special values. */  switch (numtest (d))    {      case NAN:      case INF:        errno = EDOM;      case 0:        *exp = 0;        return (d);    }  EXTRACT_WORDS (hd, ld, d);  /* Get the exponent. */  *exp = ((hd & 0x7ff00000) >> 20) - 1022;  /* Get the mantissa. */   lf = ld;  hf = hd & 0x800fffff;    hf |= 0x3fe00000;  INSERT_WORDS (f, hf, lf);  return (f);}#endif /* _DOUBLE_IS_32BITS */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -