精华内容
下载资源
问答
  • 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);):

    e1e70bcce39633ac418c11311925e945.png

    上面的警告也告诉我们,&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;

    }

    d3ed1c1250a0673b5de02dd4c775eea3.png

    展开全文
  • C语言快速以2为底的对数的方法

    千次阅读 2019-02-24 09:51:25
    C语言快速以2为底的对数的方法
  • 暴力求解:时间复杂度太高了。数比较大时,很耗费时间。 只要算法学好,学什么语言都快 ...step2: 在y的整数倍区间内,x符合条件的数量就是 (n / y) * (y - k)个 ...n / y 表示有多少个完整的 0 ~ y区间, y - k 表示...
  • c语言对数函数log的使用

    万次阅读 多人点赞 2018-04-08 13:49:21
    c语言log函数使用:   #include&lt;stdio.h&gt; #include&lt;math.h&gt; int main(){ printf("%f\n",log(10)); //以e为底的对数函数 printf("%f\n",log10(100)); //以...
  • C语言编写自己的对数函数

    千次阅读 2018-01-04 17:40:04
    今天学长突然问了我一个很有趣的问题,应该是他在仿真中需要考虑对数函数到底进行的复杂度是多大,所以要分析求一个数的对数到底需要多少次加法及乘法。这个问题一下就吸引了我,一般在C语言中我们就#include然后就...
  • 前言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:02
    int 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()函数:返回以e为底的对数值头文件:#includelog() 函数返回以 e 为底的对数值,其原型为:double log (double x);log()用来计算以e为底的 x 的对数值,然后将结果返回。设返回值为 ret,则x = eret如果 x ...
  • C语言中的数组名地址

    千次阅读 2021-05-07 10:39:43
    数组名地址,数组指针
  • c语言取地址符与数组之间联系 大家都知道在c语言中,“&”放在在变量前有取得该变量内存地址的意思,那如果将“&”符号放在数组之前又会有怎样的变化呢? 数组名与指针的关系 在c语言中,数组名为该数组首...
  • C语言——对数组进行循环删除重复项等操作(沈阳工业大学人机交互课设) 题目: 编写程序,输入若干个按由小到大的整数(可能有重复数),保存到数组中,利用循环删除所有重复的值,使相等的数只保留一个。 在程序设计...
  • C语言中的绝对值函数

    万次阅读 多人点赞 2019-02-14 20:45:58
    abs() 是用来求整型表达式的绝对值 fabs() 是用来求浮点型表达式的绝对值 #include&lt;math.h&gt; 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+1自然也就要跨过整个...
  • 总所周知,我们在高中学过对数函数,记作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开始写...
  • 来自公众号:strongerHuang素材来源:网络有很多工程师喜欢自己封装一些标准库已有的...下面就来分享一下C语言常见的一些标准库。标准头文件包括: 一、标准定义()文件里包含了标准库的一些常用定义,无论我们包含...
  • 所以C语言出了链表(可以不连续的村一组数据)。下面是C语言内存分配特性,可以参考。1、C中内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。堆:用来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,802
精华内容 5,120
关键字:

c语言取对数