哪个更快:对数或查找表?

时间:2017-08-30 03:23:24

标签: c performance

在我的程序中,我有一个函数,它接受一个总是2的幂(从不为零)的字节,并将1(高位)的位置作为整数返回。

e.g. f(0010 0000) ->  2, f(0000 0001) -> 7 

这个C程序必须运行这个功能数百万次,所以我需要它非常快。我已经为这个功能写了两个实现,但我真的不知道哪个更快。

int f(unsigned char bit) {
    //ln2 is the log base e of two. Basically I'm doing 7 minus log base 2 of the input
    return (int)(7 - round(log(bit) / ln2));
} 

int f(unsigned char bit) {
    if (bit == 0x00) /**/ return 0;
    else if (bit == 0x01) return 7;
    else if (bit == 0x02) return 6;
    else if (bit == 0x04) return 5;
    else if (bit == 0x08) return 4;
    else if (bit == 0x10) return 3;
    else if (bit == 0x20) return 2;
    else if (bit == 0x40) return 1;
    else if (bit == 0x80) return 0;
}

我没有计算机科学教育,我只是一个业余爱好者,所以很多这些问题我很难自己解决。我认为log()函数很慢,但我知道如果语句占用周期并且分支预测会导致内容变慢。老实说,我不知道这是否正确,只是猜测。

任何人都能为我提供更快的知识吗?为什么?或者,如果您有其他选择,甚至更好的方式我愿意接受建议!谢谢!

0 个答案:

没有答案