搜索
bottom↓
回复: 14

救急!如何计算对数

[复制链接]

出0入0汤圆

发表于 2009-5-9 16:01:32 | 显示全部楼层 |阅读模式
做个东西需显示出增益,但不知道如何用C语言写程序计算对数。有知道的朋友请教教。能算出A=LG(X)的也行。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2009-5-9 16:03:37 | 显示全部楼层
有空间的话就查表。
也可以弄个简单的表,落在中间的数用插值。不知道这个想法行不行。

出0入0汤圆

 楼主| 发表于 2009-5-9 16:07:02 | 显示全部楼层
这是个方法,不过太麻烦了,实在不行我再考虑用吧。
没什么计算对数的函数吗?

出0入0汤圆

发表于 2009-5-9 16:16:25 | 显示全部楼层
编译器好像自带的LOG函数,如ICCAVR中的MATH.H中有:
double log(double x);                                /* ln x */
double log10(double x);                                /* log 10 of x */

出0入0汤圆

发表于 2009-5-9 16:24:57 | 显示全部楼层
网上搜了下,大把。
看来还真有如我上面说的插值那样干的:

(原文件名:1.gif)


(原文件名:2.gif)

出0入0汤圆

发表于 2009-5-12 10:14:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-12 12:00:34 | 显示全部楼层
MARK!

出0入0汤圆

发表于 2009-5-12 13:38:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-12 14:21:13 | 显示全部楼层
查看编译器的.\include\math.h文件、查阅编译器的帮助。

出0入0汤圆

发表于 2009-5-12 16:56:30 | 显示全部楼层
这个是否可以这样计算?

设 a 为 1~65535,且a的二进制数为:
    0 0 0 0 0 1 X X X X X X X X X X
    \___ ___/   \___ ___/
        V           V
    前面n个0    i取5位二进制数,不足5位后面补0

则a的分贝值可表示为:
    90-6*n+log_tab

n和i可以轻松以移位求得。而对数表如下:
unsigned char log_tab[32]={0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,};

式中常90为log(32768)*20,系数6为log(2)*20

出0入0汤圆

发表于 2012-3-1 17:05:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-3 09:45:45 | 显示全部楼层
回复【10楼】cowboy
这个是否可以这样计算?
设 a 为 1~65535,且a的二进制数为:
    0 0 0 0 0 1 x x x x x x x x x x  
    \___ ___/   \___ ___/
        v           v
    前面n个0    i取5位二进制数,不足5位后面补0
则a的分贝值可表示为:
    90-6*n+log_tab
n和i可以轻松以移位求得。而对数表如下:
unsigned char log_tab[32]={0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,};
式中常90为log(32768)*20,系数6为log(2)*20

-----------------------------------------------------------------------

好牛X,完全看不明白。。。

言归正传:
CPU是不支持对数的,所以如果对数运算能转换成移位和四则运算就最好,否则示符运算的密度,
如果隅尔求对数,或几秒才求一次,可用mach.h上的办法,或用展开式法,来写算法。
否则,一定要用查表法,才能提速。
一定要设法减少运算量,即对整个算式查表。

出0入0汤圆

发表于 2012-3-6 11:59:49 | 显示全部楼层
回复【10楼】cowboy  
这个是否可以这样计算?
设 a 为 1~65535,且a的二进制数为:
    0 0 0 0 0 1 x x x x x x x x x x
    \___ ___/   \___ ___/
        v           v
    前面n个0    i取5位二进制数,不足5位后面补0
则a的分贝值可表示为:
    90-6*n+log_tab
n和i可以轻松以移位求得。而对数表如下:
unsigned char log_tab[32]={0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,};
式中常90为log(32768)*20,系数6为log(2)*20

-----------------------------------------------------------------------
牛仔的这个表没有处理四舍五入,我来个带四舍五入的版本:
log_tab[32]={0,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,}

出0入0汤圆

发表于 2012-3-6 16:24:32 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 16:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表