简易对数求法
来源:互联网 发布:全国地区代码数据字典 编辑:程序博客网 时间:2024/05/21 12:08
设对数...,因为是递增函数。
假设,如果,则,反之则.
由此可得的简易算法如下(计算机程序设计艺术P19):
首先将x的小数点左移或右移,使得; 这样就确定了n.现在置,对于k>=1,置:
如果, 则 ;
如果, 则 ;
从而我们得到了。由此可以求出的值。代码如下:
#include<stdlib.h>#include<stdio.h>#include <math.h>double log10(double x);void main(){ int i; for ( i= 100; i<300; i+= 10) { printf("%5d MATH:%2.10f SELF:%2.10f\n",i,log(i)/log(10),log10(i)); }}double getIntNum(double *pValue){ double a = 1; double b = 0.1; double r = 0; double x = *pValue; if ( x < 1.0 ) { a = -a; b = 10; } while ( x >= 10 || x < 1 ) { r += a; x *= b; } *pValue = x; return r;}double log10(double x){ double r; double a = 2; int i; r = getIntNum(&x); for ( i = 0 ; i<40; i++ ) { x *= x; if ( x >= 10 ) { r = r + 1/a; x /= 10; } a *= 2; } return r;}
结果如下:
100 MATH:2.0000000000 SELF:2.0000000000 110 MATH:2.0413926852 SELF:2.0413926852 120 MATH:2.0791812460 SELF:2.0791812460 130 MATH:2.1139433523 SELF:2.1139433523 140 MATH:2.1461280357 SELF:2.1461280357 150 MATH:2.1760912591 SELF:2.1760912591 160 MATH:2.2041199827 SELF:2.2041199827 170 MATH:2.2304489214 SELF:2.2304489214 180 MATH:2.2552725051 SELF:2.2552725051 190 MATH:2.2787536010 SELF:2.2787536010 200 MATH:2.3010299957 SELF:2.3010299957 210 MATH:2.3222192947 SELF:2.3222192947 220 MATH:2.3424226808 SELF:2.3424226808 230 MATH:2.3617278360 SELF:2.3617278360 240 MATH:2.3802112417 SELF:2.3802112417 250 MATH:2.3979400087 SELF:2.3979400087 260 MATH:2.4149733480 SELF:2.4149733480 270 MATH:2.4313637642 SELF:2.4313637642 280 MATH:2.4471580313 SELF:2.4471580313 290 MATH:2.4623979979 SELF:2.4623979979
0 0
- 简易对数求法
- 对数
- 对数
- 对数
- 阶乘求法
- 最大公约数求法
- 最大公约数求法
- 素数求法
- 素数求法
- 最大公约数求法
- Sa求法
- 质数求法
- 1000!求法
- 素数求法/
- 关于对数
- 自然对数
- 对数公式
- 自然对数
- 使用node.js cheerio抓取网页数据
- getchar()用法
- 推行测试驱动开发 (TDD) 有这么难吗?
- YARN MapReduce MRAppMaster-剖析
- Leopard概述
- 简易对数求法
- memset的效率问题
- HTTP协议头部与Keep-Alive模式详解
- 从零开始搭建Node.js, Express, Ejs, Mongodb服务器
- 用node.js+express+ejs+bootstrap来建立一个基本网页
- sts
- Nodejs crawler中的几个小疑问
- 管理学定律一:蝴蝶效应与青蛙现象
- 管理学定律二:鳄鱼法则与鲇鱼效应