对于不支持浮点型的10log10运算实现
来源:互联网 发布:name域名隐私 编辑:程序博客网 时间:2024/05/17 15:40
#include <stdio.h>#include <stdlib.h>#include <ctype.h>unsigned int uint10log10(unsigned int value);void main(int argc,char* argv[]){if(argc<2){printf("Please usage:10log10.exe value\n");return;}else{int i = 0;while(argv[1][i]){if(isdigit(argv[1][i])){++i;continue;}else{printf("the type of intput value is not unsigned int\n");return;}}unsigned int value = atoi(argv[1]);unsigned int ret10log10 = uint10log10(value);printf("\n10log(%u)=%u\n",value,ret10log10);}}/*get a rough value because the type is not float *but the biggest margin of error is 3 */unsigned int uint10log10(unsigned int value){unsigned int retlog = 0;while(value > 10 || value == 10 ){++retlog;value /= 10;}retlog *= 10;//value = pow(value,10); pow require the type of value is float or doublevalue *= value;value = value * value * value * value * value; //ugly but fast.while(value > 10 || value == 10 ){++retlog;value /= 10;}return retlog;}
误差最大值为3,分析如下
假设值x=k*10^p + m,
令k^10=f*10^q
上述算法分两步:先求出最高位,可看成求10log(k*10^p),忽略了最高位后面的值m。由于k的值小于10,先对其求10次方在求log,10log(k)=q+logf;
那上述算法实际求解的结果为10p+q
由上述的求解步骤可知误差值由两部分组成,m和log(f)
先来看第一步,令m=l*10^p, l小于1。X=(k+l)*10^p,第一步的误差值就为10log(1+l/k)。整体误差值就为10log(1+l/k)+ logf<10log(1+1/k)+log(f)。
f的值与k有关
kf10log(1+1/k)log(f)biggest margin1110log(2)03.0121.02410log(3/2)0.011.7735.904910log(4/3)0.772.0241.04857610log(5/4)0.020.9959.76562510log(6/5)0.991.7866.046617610log(7/6)0.781.4572.8247524910log(8/7)0.451.0381.07374182410log(9/8)0.030.5493.48678440110log(10/9)0.541因此误差最大值为3 当最高位k=1,m接近于1*10^p次方时达到
- 对于不支持浮点型的10log10运算实现
- java对于浮点运算的bug
- linux kernel对于浮点运算的支持
- linux kernel对于浮点运算的支持
- linux kernel对于浮点运算的支持
- JavaScript不支持精确的浮点数运算的解决方案
- 浮点运算是怎么实现的?
- 浮点数的相关运算Java实现
- PHP对于浮点数运算问题
- shell 实现浮点运算
- 【c 笔记】windows的wsprintf不支持浮点型的%f
- 对于浮点数的比较
- 浮点数的运算
- 浮点数据的运算
- 丰富多彩的浮点运算
- 浮点运算的优化
- 浮点数的运算
- log10()的运用
- Windows 通信基础(Windows Communication Foundation)
- PS讲义
- PIC单片机(PIC16F873)小项目五(电路工作原理)
- 教大家集中注意力的训练方法
- 更改visual studio 2010 帮助文档库位置
- 对于不支持浮点型的10log10运算实现
- c++ 覆盖、重载、隐藏
- Nginx+Tomcat+Session 高性能群集搭建
- HBase shell 简单使用
- UVa 138 - Street Numbers
- 张老师高新技术技术学习日志---Part1
- 开源项目推荐(1):Android-ViewPagerIndicator 分页指示器,实现左右滑分页视图
- selenium和webdriver合并的原因
- Jave操作HBase