-
2021-05-20 05:18:58
C语言log()函数:返回以e为底的对数值头文件:
#include
log() 函数返回以 e 为底的对数值,其原型为:
double log (double x);
log()用来计算以e为底的 x 的对数值,然后将结果返回。设返回值为 ret,则
x = eret
如果 x 为负数或 0,则会发生错误并设置 errno 值。错误代码:
EDOM:参数x 为负数;
ERANGE:参数x 为零值,零的对数值无定义。
注意:使用 GCC 编译时请加入-lm。
【实例】求5.5的对数。
#include
#include
int main ()
{
double param, result;
param = 5.5;
result = log (param);
printf ("log(%f) = %f\n", param, result );
return 0;
}
输出结果:
log(5.500000) = 1.704748
C语言log10()函数:返回以10为底的对数值头文件:
#include
log10() 返回以10为底的对数值,其原型为:
double log10(double x);
log10()用来计算以10为底的 x 的对数值,然后将结果返回。设返回值为 ret,则
x = 10ret
返回值:返回参数x 以10 为底的对数值。
如果 x 为负数或 0,则会发生错误并设置 errno 值。错误代码:
EDOM:参数x 为负数;
ERANGE:参数x 为零值,零的对数值无定义。
注意:使用 GCC 编译时请加入-lm。
【实例】
#include
main(){
double answer;
answer = log10(100);
printf("log10(100) = %f\n", answer);
}
输出结果:
log10(100) = 2.000000
更多相关内容 -
C语言求对数
2018-03-09 13:47:22求以2为底,x的对数:#include <stdio.h>int main(){ int x; int ret = 0; scanf("%d", &x); int t = x; while ( x > 1 ) { x /= 2; ret ++; } printf("log2 of %d ...求以2为底,x的对数:
#include <stdio.h>
int main(){int x;int ret = 0;
scanf("%d", &x);int t = x;while ( x > 1 ) {x /= 2;ret ++;}printf("log2 of %d is %d.", t, ret);
return 0;}
-
用C语言编写简单的求解对数函数
2019-04-11 16:40:41用C语言编写简单的对数函数 作为一个图像处理芯片公司的工程师,支持不同sensor的曝光策略是一个ISP的基本功能,但是有的sensor曝光策略复杂,还需要加上sensor厂商自己添加的补丁,而ISP本身空间有限,不能引用math...用C语言编写简单的对数函数
作为一个图像处理芯片公司的工程师,支持不同sensor的曝光策略是一个ISP的基本功能,但是有的sensor曝光策略复杂,还需要加上sensor厂商自己添加的补丁,而ISP本身空间有限,不能引用math.h,或者大量定义数组来查表,所以有时候需要发挥自己的想象力。
比如`.
// An highlighted block const unsigned int gain_table[225] = { 1024, 1046, 1069, 1092, 1116, 1140, 1166, 1191, 1217, 1244, 1271, 1299, 1328, 1356, 1386, 1416, 1448, 1479, 1512, 1545, 1579, 1613, 1649, 1685, 1722, 1760, 1798, 1837, 1878, 1918, 1960, 2003, 2048, 2092, 2138, 2185, 2233, 2281, 2332, 2383, 2435, 2489, 2543, 2598, 2656, 2714, 2774, 2833, 2896, 2959, 3024, 3090, 3158, 3226, 3297, 3371, 3443, 3518, 3597, 3675, 3754, 3837, 3923, 4009, 4096, 4185, 4277, 4371, 4466, 4563, 4664, 4766, 4871, 4976, 5087, 5197, 5312, 5427, 5546, 5667, 5793, 5919, 6048, 6181, 6316, 6455, 6597, 6740, 6890, 7040, 7194, 7351, 7513, 7674, 7843, 8015, 8192, 8371, 8555, 8742, 8933, 9127, 9331, 9532, 9742, 9956, 10174, 10394, 10625, 10859, 11096, 11335, 11586, 11839, 12096, 12363, 12633, 12905, 13189, 13486, 13774, 14074, 14388, 14703, 15019, 15349, 15694, 16039, 16384, 16743, 17102, 17476, 17867, 18255, 18662, 19065, 19485, 19901, 20336, 20789, 21236, 21704, 22192, 22671, 23172, 23663, 24209, 24708, 25266, 25811, 26379, 26973, 27548, 28149, 28777, 29382, 30066, 30727, 31359, 32078, 32768, 33487, 34239, 34952, 35696, 36792, 37282, 38130, 38926, 39850, 40721, 41630, 42473, 43464, 44384, 45343, 46345, 47393, 48349, 49490, 50533, 51622, 52758, 53946, 55188, 56299, 57456, 58867, 60133, 61455, 62836, 64035, 65536, 66841, 68478, 69905, 71392, 72944, 74565, 76260, 78033, 79512, 81442, 83055, 85163, 86928, 88768, 90687, 92691, 94786, 96978, 98689, 101067, 103563, 105517, 107546, 110376, 112598, 114912, 117323, 119837, 122461, 125203, 128070, 131072, }; void set_gain(unsigned int gain) { unsigned int ret = 0, i; unsigned int gain_idx, sghd_patch = 1; // Check gain if (gain > gain_table[224]) gain = gain_table[224]; else if(gain < gain_table[0]) gain = gain_table[0]; // search most suitable gain into gain table for (i=0; i<224; i++) { if (gain_table[i]> gain) break; sensor_i2c_write(0x83, i); }
这个sensor的增益策略是一个典型的查表法。但是ISP的空间有限,无法设定那么多数组,于是我在excel表中将数据做了处理,先搞清楚数组和所求的i之间的关系。
发现对应表格数据除以32的平方增益倍数就比较容易看出来了。
大概的增益倍数 i = 32 x log2gain。
所以想要知道i,必须要计算一个对数函数,但是问题来了,ISP的固件里面不能引用math.h!所以只能自己编写一个求对数的函数!通过百度,在csdn上查出来一个自己编写的对数函数:#include<stdio.h> double MYLOG(double a) { int N = 15;//我们取了前15+1项来估算 int k,nk; double x,xx,y; x = (a-1)/(a+1); xx = x*x; nk = 2*N+1; y = 1.0/nk; for(k=N;k>0;k--) { nk = nk - 2; y = 1.0/nk+xx*y; } return 2.0*x*y; } int main() { double b ; b = MYLOG(2); printf("%.10f",b); getch(); return 0; }
作者:starINsky_mike
来源:CSDN
原文:https://blog.csdn.net/mike190267481/article/details/7404702
版权声明:本文为博主原创文章,转载请附上博文链接!现在vs上模拟验证了一下,当N大于30的时候,得出来的i精度相差不大,我以为看到了希望,导入服务器,编译,但是问题又来了!!!固件没有空间承载大量计算!!
所以只能自己想办法编写一个简单的对数函数!!!unsigned short Math(unsigned gain) { int i = 0,j = 0; while (gain > 3) { gain = gain >> 1; i++; } j = (i +1) + ((3 * (s_nCurGain - (2<<i))) / s_nCurGain); return j; }
因为以2为底,所以先求出当前增益倍数为2的指数,然后将计算时省掉的低位部分算出来,当作简单的一次函数处理,来弥补之前只算指数的精度,通过vs模拟,精度差距竟然和百度到的差不多!!!哈哈哈哈哈!
第一篇博客,写的有些简单,希望能对大家有所帮助! -
C语言 对数组名取地址
2021-05-22 18:54:14作者 : 卿笃军你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算。这会出现什么样的结果呢?演示样例:int a[5] = {1,2,3,4,5};int *p = (int *)(&a+1);printf("%d\n",*(p-1));这个输出会是...作者 : 卿笃军
你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算。这会出现什么样的结果呢?
演示样例:
int a[5] = {1,2,3,4,5};
int *p = (int *)(&a+1);
printf("%d\n",*(p-1));
这个输出会是多少呢?
咦?为什么第二行须要强制转化类型呢?
答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针。怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]。
行指针+1,就是对指针进行加减操作,其结果还是一个行指针~~~原来如此,须要强制转换为单指针。
能够看一段代码,例如以下:
#include
int main()
{
int a[5] = {1,2,3,4,5};
int *p = (&a+1);
return 0;
}
编译会出现例如以下警告(警告行数:int *p = (&a+1);):
上面的警告也告诉我们,&a是一个行指针~~~
那么,输出结果是多少呢?
答:当然是5。
为什么?
答:上面不是说了嘛,&a就是一个行指针,那就是指向一行的指针咯。行指针+1,不就指向下一行了,这里一行为[5]个,那么int *p = (int *)(&a+1)就要在a的基础上偏离5个位置:(例如以下:上一行表示偏离位数,下一行表示a[]中相应的数据)
0 1 2 3 4 5
1 2 3 4 5 *
咦,这不是越界了吗?移动五位都跑出a[]数组处于' * '号位置了。哦,我看到printf()输出了。你输出的是*(p-1),这里p是一个单指针-1就是往左位移一位即可了,那不就是又回到5的位置了吗?原来是这样,输出结果是5 。
以下我们用一段代码来显示位移情况~~~
#include
int main()
{
int a[5] = {1,2,3,4,5};
int *p = (int *)(&a+1); //+1相当于移动了5位
printf("%p\n%p\nbit = %d\n",a,p,p-a);
printf("%d\n", *(p-1));
return 0;
}
-
C语言快速取以2为底的对数的方法
2019-02-24 09:51:25C语言快速取以2为底的对数的方法 -
c语言 找对数(非暴力算法)
2022-02-09 21:58:37暴力求解:时间复杂度太高了。数比较大时,很耗费时间。 只要算法学好,学什么语言都快 ...step2: 在y的整数倍区间内,x符合条件的数量就是 (n / y) * (y - k)个 ...n / y 表示有多少个完整的 0 ~ y区间, y - k 表示... -
c语言对数函数log的使用
2018-04-08 13:49:21c语言log函数使用: #include<stdio.h> #include<math.h> int main(){ printf("%f\n",log(10)); //以e为底的对数函数 printf("%f\n",log10(100)); //以... -
C语言编写自己的对数函数
2018-01-04 17:40:04今天学长突然问了我一个很有趣的问题,应该是他在仿真中需要考虑对数函数到底进行的复杂度是多大,所以要分析求一个数的对数到底需要多少次加法及乘法。这个问题一下就吸引了我,一般在C语言中我们就#include然后就... -
C语言中对数组赋值的三种形式
2021-05-18 15:34:45前言C 语言支持数组数据结构,...在C语言中,对数组进行赋值的三种形式方法如下:1、通过循环的形式 即:数组名[下标] 对数组的元素进行依次赋值#include int main(){int i;int a[10] = {0};for(i=0;i<10;i++){sc... -
C语言中取绝对值
2019-10-09 23:14:02int abs(int i); ... // 处理int类型的取绝对值 double fabs(double i); //处理double类型的取绝对值 float fabsf(float i); /处理floa... -
C语言——快速取以2为底x的对数
2020-05-08 15:07:37记录: 1. 自己的函数 int FastLog2(int x) { float fx; unsigned long ix, exp; fx = (float)x; ix = *(unsigned long*)&fx; exp = (ix >> 23) & 0xFF; return exp - 127;...... -
c语言中如何输入log函数,在C语言中使用对数函数的方法
2021-05-22 02:24:04C语言log()函数:返回以e为底的对数值头文件:#includelog() 函数返回以 e 为底的对数值,其原型为:double log (double x);log()用来计算以e为底的 x 的对数值,然后将结果返回。设返回值为 ret,则x = eret如果 x ... -
C语言中的数组名取地址
2021-05-07 10:39:43数组名取地址,数组指针 -
c语言取地址符与数组之间联系
2021-03-07 15:56:48c语言取地址符与数组之间联系 大家都知道在c语言中,“&”放在在变量前有取得该变量内存地址的意思,那如果将“&”符号放在数组之前又会有怎样的变化呢? 数组名与指针的关系 在c语言中,数组名为该数组首... -
C语言——对数组进行循环删除重复项等操作(沈阳工业大学人机交互课设)
2021-10-29 13:44:38C语言——对数组进行循环删除重复项等操作(沈阳工业大学人机交互课设) 题目: 编写程序,输入若干个按由小到大的整数(可能有重复数),保存到数组中,利用循环删除所有重复的值,使相等的数只保留一个。 在程序设计... -
C语言中的取绝对值函数
2019-02-14 20:45:58abs() 是用来求整型表达式的绝对值 fabs() 是用来求浮点型表达式的绝对值 #include<math.h> int型 int abs(int x); long 型 long labs(int x); 浮点数 float double double fabs(double x);...... -
C语言数组名取地址
2016-10-02 16:17:49面试中遇到的C语言数组名取地址的问题 -
对数组名取地址 a[ ],&a
2021-11-29 11:45:02但对数组名取地址时却要注意了,在理解“对数组名取地址”这一表达式的含义时一定要记住:数组名是“数组”这种变量的变量名 这样,&a就好理解了,它取的是“数组”这种变量的地址 &a+1自然也就要跨过整个... -
C语言中 ln(以自然对数e为底) lg(以十为底) 以及logab(以a为底,b为真数)的相关知识
2021-05-24 00:48:10总所周知,我们在高中学过对数函数,记作y=logax。下面是百度百科关于对数函数的描述:对数的定义:一般地,如果ax=N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x= logaN,读作以a为底N的对数,其中a叫做... -
C语言对数组取地址
2016-11-22 10:58:00直觉上&a应该是对a这个指向a[0]指针变量取地址,所以猜测结果是不一样的。 但是,看输出结果。 a= 0x7fff8178af30 &a= 0x7fff8178af30 &a+ 1 = 0x7fff8178af44 2 5 答案是一样,这个是为什么呢? a... -
手把手入门C语言—数组的取值运算
2020-03-28 17:35:53手把手入门C语言—数组的取值运算取数组地址值找规律取数组地址值使用 &cArray[i]取数组地址值使用 &(cArray[i])取数组地址值使用 cArray+i取数组地址值的三种方式取数组值找出规律取数组值使用 *(iArray + ... -
什么是c语言
2021-05-22 04:19:51手机评站网今天精心准备的是《什么是c语言》,下面是详解!什么是C语言和C+语言1、C语言。C语言诞生得非常早,当时人们普遍还习惯用汇编语言编写软件,并且没有什么统一,通用的操作系统,基本上软件都是从0开始写... -
取两个数较小值c语言_C语言常用标准库
2020-11-20 21:52:33来自公众号:strongerHuang素材来源:网络有很多工程师喜欢自己封装一些标准库已有的...下面就来分享一下C语言常见的一些标准库。标准头文件包括: 一、标准定义()文件里包含了标准库的一些常用定义,无论我们包含... -
关于C语言变量和数组的声明问题
2021-05-21 17:28:51所以C语言出了链表(可以不连续的村一组数据)。下面是C语言内存分配特性,可以参考。1、C中内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。堆:用来...