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

📄 sf_logarithm.c

📁 KPIT GNU Tools is a set of GNU development tools for Renesas microcontrollers.
💻 C
字号:
/* @(#)z_logarithmf.c 1.0 98/08/13 *//****************************************************************** * The following routines are coded directly from the algorithms * and coefficients given in "Software Manual for the Elementary * Functions" by William J. Cody, Jr. and William Waite, Prentice * Hall, 1980. ******************************************************************//****************************************************************** * Logarithm * * Input: *   x - floating point value *   ten - indicates base ten numbers * * Output: *   logarithm of x * * Description: *   This routine calculates logarithms. * *****************************************************************/#include "fdlibm.h"#include "zmath.h"static const float a[] = { -0.5527074855 };static const float b[] = { -0.6632718214e+1 };static const float C1 = 0.693145752;static const float C2 = 1.428606820e-06;static const float C3 = 0.4342944819;float_DEFUN (logarithmf, (float, int),        float x _AND        int ten){  int N;  float f, w, z;  /* Check for domain error here. */  if (x <= 0.0)    {      errno = ERANGE;      return (z_notanum_f.f);    }  /* Get the exponent and mantissa where x = f * 2^N. */  f = frexpf (x, &N);  z = f - 0.5;  if (f > __SQRT_HALF)    z = (z - 0.5) / (f * 0.5 + 0.5);  else    {      N--;      z /= (z * 0.5 + 0.5);    }  w = z * z;  /* Use Newton's method with 4 terms. */  z += z * w * (a[0]) / ((w + 1.0) * w + b[0]);  if (N != 0)    z = (N * C2 + z) + N * C1;  if (ten)    z *= C3;  return (z);}

⌨️ 快捷键说明

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