快速log10函数 fast_log10

快速log10函数

#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include <time.h>

float fast_log10(float x)
{
    register union { float f; uint32_t i; } vx;
    register union { uint32_t i; float f; } mx;
    vx.f = x;
    mx.i = (vx.i & 0x007FFFFF) | 0x3F000000;
    return vx.i*3.5885E-08f - 37.395f - 0.45095f * mx.f - 0.51954f / (0.35208f + mx.f);
}

int main()
{
    int i;
    float temp;
    struct timespec ts,ts2;
    printf("log10(12123) = %f\n",log10f(12123));
    printf("log2(10) = %lf\n",log2f(10));
    printf("2log10(12123) = %f\n",log2f(12123)/3.321928);
    printf("fast_log10(12123) = %f\n",fast_log10(12123));
    //精度测试
    for(i=0;i<100;i++){
        temp = abs(rand());
        printf("in=%f, log10 = %f ,fastlog10 = %f, err = %f\n",temp,log10f(temp),fast_log10(temp),log10f(temp)-fast_log10(temp));
    }
    //速度测试
    clock_gettime(CLOCK_REALTIME, &ts); // 获取当前的实时时间
    for(i=0;i<50000000;i++){
        temp = abs(rand());
        temp = log10f(temp);
    }
    clock_gettime(CLOCK_REALTIME, &ts2); // 获取当前的实时时间
    printf("Seconds: %ld, Nanoseconds: %ld\n", ts.tv_sec, ts.tv_nsec);
    printf("Seconds: %ld, Nanoseconds: %ld\n", ts2.tv_sec, ts2.tv_nsec);
    printf("log10 time = %ld ms\n",(ts2.tv_sec - ts.tv_sec)*1000+(ts2.tv_nsec-ts.tv_nsec)/1000000);

    clock_gettime(CLOCK_REALTIME, &ts); // 获取当前的实时时间
    for(i=0;i<50000000;i++){
        temp = abs(rand());
        temp = fast_log10(temp);
    }
    clock_gettime(CLOCK_REALTIME, &ts2); // 获取当前的实时时间
    printf("Seconds: %ld, Nanoseconds: %ld\n", ts.tv_sec, ts.tv_nsec);
    printf("Seconds: %ld, Nanoseconds: %ld\n", ts2.tv_sec, ts2.tv_nsec);
    printf("log10 time = %ld ms\n",(ts2.tv_sec - ts.tv_sec)*1000+(ts2.tv_nsec-ts.tv_nsec)/1000000);
    return 0;
}

结果:

log10(12123) = 4.083610
log2(10) = 3.321928
2log10(12123) = 4.083610
fast_log10(12123) = 4.083542
in=41.000000, log10 = 1.612784 ,fastlog10 = 1.612743, err = 0.000041
in=18467.000000, log10 = 4.266397 ,fastlog10 = 4.266283, err = 0.000113
in=6334.000000, log10 = 3.801678 ,fastlog10 = 3.801607, err = 0.000070
in=26500.000000, log10 = 4.423246 ,fastlog10 = 4.423154, err = 0.000092
in=19169.000000, log10 = 4.282599 ,fastlog10 = 4.282492, err = 0.000107
in=15724.000000, log10 = 4.196563 ,fastlog10 = 4.196465, err = 0.000098
in=11478.000000, log10 = 4.059866 ,fastlog10 = 4.059801, err = 0.000066
in=29358.000000, log10 = 4.467726 ,fastlog10 = 4.467612, err = 0.000114
in=26962.000000, log10 = 4.430752 ,fastlog10 = 4.430656, err = 0.000097
in=24464.000000, log10 = 4.388527 ,fastlog10 = 4.388454, err = 0.000074
in=5705.000000, log10 = 3.756256 ,fastlog10 = 3.756195, err = 0.000061
in=28145.000000, log10 = 4.449401 ,fastlog10 = 4.449294, err = 0.000108
in=23281.000000, log10 = 4.367002 ,fastlog10 = 4.366932, err = 0.000070
in=16827.000000, log10 = 4.226007 ,fastlog10 = 4.225914, err = 0.000093
in=9961.000000, log10 = 3.998303 ,fastlog10 = 3.998210, err = 0.000093
in=491.000000, log10 = 2.691082 ,fastlog10 = 2.691007, err = 0.000074
in=2995.000000, log10 = 3.476397 ,fastlog10 = 3.476340, err = 0.000057
in=11942.000000, log10 = 4.077077 ,fastlog10 = 4.077011, err = 0.000066
in=4827.000000, log10 = 3.683677 ,fastlog10 = 3.683581, err = 0.000096
in=5436.000000, log10 = 3.735280 ,fastlog10 = 3.735213, err = 0.000067
in=32391.000000, log10 = 4.510424 ,fastlog10 = 4.510341, err = 0.000083
in=14604.000000, log10 = 4.164472 ,fastlog10 = 4.164363, err = 0.000109
in=3902.000000, log10 = 3.591287 ,fastlog10 = 3.591196, err = 0.000091
in=153.000000, log10 = 2.184691 ,fastlog10 = 2.184623, err = 0.000069
in=292.000000, log10 = 2.465383 ,fastlog10 = 2.465300, err = 0.000083
in=12382.000000, log10 = 4.092791 ,fastlog10 = 4.092720, err = 0.000071
in=17421.000000, log10 = 4.241073 ,fastlog10 = 4.240965, err = 0.000109
in=18716.000000, log10 = 4.272213 ,fastlog10 = 4.272101, err = 0.000112
in=19718.000000, log10 = 4.294863 ,fastlog10 = 4.294762, err = 0.000100
in=19895.000000, log10 = 4.298744 ,fastlog10 = 4.298646, err = 0.000098
in=5447.000000, log10 = 3.736157 ,fastlog10 = 3.736091, err = 0.000066
in=21726.000000, log10 = 4.336980 ,fastlog10 = 4.336903, err = 0.000077
in=14771.000000, log10 = 4.169410 ,fastlog10 = 4.169300, err = 0.000110
in=11538.000000, log10 = 4.062130 ,fastlog10 = 4.062065, err = 0.000065
in=1869.000000, log10 = 3.271609 ,fastlog10 = 3.271514, err = 0.000095
in=19912.000000, log10 = 4.299115 ,fastlog10 = 4.299017, err = 0.000098
in=25667.000000, log10 = 4.409375 ,fastlog10 = 4.409292, err = 0.000083
in=26299.000000, log10 = 4.419939 ,fastlog10 = 4.419850, err = 0.000089
in=17035.000000, log10 = 4.231342 ,fastlog10 = 4.231242, err = 0.000100
in=9894.000000, log10 = 3.995372 ,fastlog10 = 3.995277, err = 0.000095
in=28703.000000, log10 = 4.457927 ,fastlog10 = 4.457816, err = 0.000111
in=23811.000000, log10 = 4.376778 ,fastlog10 = 4.376707, err = 0.000071
in=31322.000000, log10 = 4.495850 ,fastlog10 = 4.495745, err = 0.000104
in=30333.000000, log10 = 4.481915 ,fastlog10 = 4.481802, err = 0.000113
in=17673.000000, log10 = 4.247310 ,fastlog10 = 4.247198, err = 0.000112
in=4664.000000, log10 = 3.668759 ,fastlog10 = 3.668656, err = 0.000103
in=15141.000000, log10 = 4.180154 ,fastlog10 = 4.180046, err = 0.000108
in=7711.000000, log10 = 3.887111 ,fastlog10 = 3.887011, err = 0.000100
in=28253.000000, log10 = 4.451065 ,fastlog10 = 4.450956, err = 0.000108
in=6868.000000, log10 = 3.836830 ,fastlog10 = 3.836738, err = 0.000092
in=25547.000000, log10 = 4.407340 ,fastlog10 = 4.407258, err = 0.000082
in=27644.000000, log10 = 4.441601 ,fastlog10 = 4.441498, err = 0.000103
in=32662.000000, log10 = 4.514043 ,fastlog10 = 4.513967, err = 0.000076
in=32757.000000, log10 = 4.515304 ,fastlog10 = 4.515231, err = 0.000073
in=20037.000000, log10 = 4.301833 ,fastlog10 = 4.301737, err = 0.000096
in=12859.000000, log10 = 4.109207 ,fastlog10 = 4.109128, err = 0.000079
in=8723.000000, log10 = 3.940666 ,fastlog10 = 3.940562, err = 0.000104
in=9741.000000, log10 = 3.988604 ,fastlog10 = 3.988505, err = 0.000099
in=27529.000000, log10 = 4.439790 ,fastlog10 = 4.439688, err = 0.000102
in=778.000000, log10 = 2.890980 ,fastlog10 = 2.890927, err = 0.000053
in=12316.000000, log10 = 4.090470 ,fastlog10 = 4.090400, err = 0.000070
in=3035.000000, log10 = 3.482159 ,fastlog10 = 3.482100, err = 0.000058
in=22190.000000, log10 = 4.346157 ,fastlog10 = 4.346084, err = 0.000073
in=1842.000000, log10 = 3.265290 ,fastlog10 = 3.265194, err = 0.000095
in=288.000000, log10 = 2.459393 ,fastlog10 = 2.459308, err = 0.000085
in=30106.000000, log10 = 4.478653 ,fastlog10 = 4.478539, err = 0.000114
in=9040.000000, log10 = 3.956168 ,fastlog10 = 3.956059, err = 0.000109
in=8942.000000, log10 = 3.951435 ,fastlog10 = 3.951326, err = 0.000108
in=19264.000000, log10 = 4.284747 ,fastlog10 = 4.284640, err = 0.000106
in=22648.000000, log10 = 4.355030 ,fastlog10 = 4.354959, err = 0.000071
in=27446.000000, log10 = 4.438479 ,fastlog10 = 4.438378, err = 0.000101
in=23805.000000, log10 = 4.376668 ,fastlog10 = 4.376597, err = 0.000071
in=15890.000000, log10 = 4.201124 ,fastlog10 = 4.201032, err = 0.000092
in=6729.000000, log10 = 3.827950 ,fastlog10 = 3.827864, err = 0.000086
in=24370.000000, log10 = 4.386856 ,fastlog10 = 4.386782, err = 0.000073
in=15350.000000, log10 = 4.186109 ,fastlog10 = 4.186002, err = 0.000106
in=15006.000000, log10 = 4.176265 ,fastlog10 = 4.176155, err = 0.000109
in=31101.000000, log10 = 4.492774 ,fastlog10 = 4.492667, err = 0.000107
in=24393.000000, log10 = 4.387265 ,fastlog10 = 4.387192, err = 0.000073
in=3548.000000, log10 = 3.549984 ,fastlog10 = 3.549889, err = 0.000095
in=19629.000000, log10 = 4.292898 ,fastlog10 = 4.292797, err = 0.000102
in=12623.000000, log10 = 4.101162 ,fastlog10 = 4.101088, err = 0.000074
in=24084.000000, log10 = 4.381729 ,fastlog10 = 4.381657, err = 0.000072
in=19954.000000, log10 = 4.300030 ,fastlog10 = 4.299933, err = 0.000097
in=18756.000000, log10 = 4.273140 ,fastlog10 = 4.273029, err = 0.000111
in=11840.000000, log10 = 4.073352 ,fastlog10 = 4.073286, err = 0.000066
in=4966.000000, log10 = 3.696007 ,fastlog10 = 3.695918, err = 0.000089
in=7376.000000, log10 = 3.867821 ,fastlog10 = 3.867716, err = 0.000105
in=13931.000000, log10 = 4.143982 ,fastlog10 = 4.143882, err = 0.000101
in=26308.000000, log10 = 4.420088 ,fastlog10 = 4.419998, err = 0.000090
in=16944.000000, log10 = 4.229016 ,fastlog10 = 4.228919, err = 0.000097
in=32439.000000, log10 = 4.511067 ,fastlog10 = 4.510985, err = 0.000082
in=24626.000000, log10 = 4.391394 ,fastlog10 = 4.391319, err = 0.000074
in=11323.000000, log10 = 4.053961 ,fastlog10 = 4.053895, err = 0.000066
in=5537.000000, log10 = 3.743274 ,fastlog10 = 3.743211, err = 0.000064
in=21538.000000, log10 = 4.333205 ,fastlog10 = 4.333127, err = 0.000078
in=16118.000000, log10 = 4.207311 ,fastlog10 = 4.207229, err = 0.000082
in=2082.000000, log10 = 3.318481 ,fastlog10 = 3.318409, err = 0.000072
in=22929.000000, log10 = 4.360385 ,fastlog10 = 4.360315, err = 0.000070
in=16541.000000, log10 = 4.218562 ,fastlog10 = 4.218481, err = 0.000080
Seconds: 1721308432, Nanoseconds: 518313400
Seconds: 1721308435, Nanoseconds: 440282400
log10 time = 2922 ms
Seconds: 1721308435, Nanoseconds: 455890700
Seconds: 1721308436, Nanoseconds: 705647400
log10 time = 1249 ms

相关推荐

  1. 快速log10函数 fast_log10

    2024-07-18 23:30:02       22 阅读
  2. MongoDB聚合运算符:$log10

    2024-07-18 23:30:02       38 阅读
  3. C语言10 函数

    2024-07-18 23:30:02       21 阅读
  4. 10Docker Compose快速入门

    2024-07-18 23:30:02       50 阅读
  5. 3.10 log | 647. 回文子串

    2024-07-18 23:30:02       38 阅读
  6. 10 快速排序-左右指针法

    2024-07-18 23:30:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 23:30:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 23:30:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 23:30:02       62 阅读
  4. Python语言-面向对象

    2024-07-18 23:30:02       72 阅读

热门阅读

  1. Linux 日志管理与系统调优补充

    2024-07-18 23:30:02       25 阅读
  2. Qt Creator 项目Console 项目踩坑日记

    2024-07-18 23:30:02       22 阅读
  3. 信息系统项目管理师(高项)—学习笔记三

    2024-07-18 23:30:02       21 阅读
  4. linux修改文件夹下所有文件的权限(常用)

    2024-07-18 23:30:02       21 阅读
  5. c++类的继承详解

    2024-07-18 23:30:02       20 阅读
  6. 目标检测算法

    2024-07-18 23:30:02       23 阅读
  7. 有道云笔记 markdown 生成目录

    2024-07-18 23:30:02       25 阅读
  8. c/c++:多线程下调用exit接口函数的问题

    2024-07-18 23:30:02       21 阅读
  9. 国王(C++)

    2024-07-18 23:30:02       24 阅读
  10. @RequestBody接收到的参数中如何限制List的长度?

    2024-07-18 23:30:02       23 阅读