相关疑难解决方法(0)

快速计算64位整数的log2

一个伟大的编程资源,Bit Twiddling Hacks,提出(这里)以下方法来计算32位整数的log2:

#define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
static const char LogTable256[256] = 
{
    -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
    LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
    LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
};

unsigned int v; // 32-bit word to find the log of
unsigned r;     // r will be lg(v)
register …
Run Code Online (Sandbox Code Playgroud)

c lookup 64-bit bit-manipulation 32bit-64bit

45
推荐指数
6
解决办法
3万
查看次数

如何在C++中执行整数log2()?

在C++标准库中,我发现只有一个浮点日志方法.现在我使用log来查找二叉树中的索引级别(floor(2log(index))).

代码(C++):

int targetlevel = int(log(index)/log(2));
Run Code Online (Sandbox Code Playgroud)

我担心对于某些边元素(值为2 ^ n的元素),log将返回n-1.999999999999而不是n.0.这种恐惧是否正确?如何修改我的陈述以便始终返回正确的答案?

c++ logarithm floating-accuracy

41
推荐指数
7
解决办法
6万
查看次数

在C#中计算整数log2的最快方法是什么?

如何最有效地计算C#中整数(日志基数2)所需的位数?例如:

int bits = 1 + log2(100);

=> bits == 7
Run Code Online (Sandbox Code Playgroud)

c# algorithm math bit-manipulation

11
推荐指数
3
解决办法
1万
查看次数

计算"2的幂"数字的最快方法?

找到2的幂的最快方法是什么,使用一定数量(即2的幂)?

我对数学不是很熟练,所以我不确定如何最好地描述它.但功能将类似于x = 2^y这里y是输出,并且x是输入.这是一个真实表,如果有助于解释它的外观.

0 = f(1)
1 = f(2)
2 = f(4)
3 = f(8)
...
8 = f(256)
9 = f(512)
Run Code Online (Sandbox Code Playgroud)

我已经做了一个这样做的功能,但我担心它不是很有效(或者说优雅).这样做会有更简单,更有效的方法吗?我正在使用它来计算纹理的哪个区域用于缓冲绘制的完成方式,因此每个绘制的对象至少调用一次.这是我到目前为止所做的功能:

uint32 getThePowerOfTwo(uint32 value){
    for(uint32 n = 0; n < 32; ++n){
        if(value <= (1 << n)){
            return n;
        }
    }
    return 32; // should never be called
}
Run Code Online (Sandbox Code Playgroud)

c++ math

8
推荐指数
1
解决办法
2683
查看次数

确定字节中的哪个单位已设置

我有一个byte我用于比特标志.我知道在任何给定时间都设置了一个且只有一个byte.

例如: unsigned char b = 0x20; //(00100000) 6th most bit set

我目前使用以下循环来确定设置了哪个位:

int getSetBitLocation(unsigned char b) {
  int i=0;
  while( !((b >> i++) & 0x01) ) { ; }
  return i;
}
Run Code Online (Sandbox Code Playgroud)

如何最有效地确定设定位的位置?我可以不经迭代地完成这项工作吗?

c optimization bit-manipulation bitflags

7
推荐指数
2
解决办法
3789
查看次数

表示给定“int”的最小位数

在 C++ 中,找出存储给定 int 需要多少位的最快方法是什么?

我可以尝试将数字除以 2 多次,但除法很慢。有什么快捷的方法吗?

编辑:

非常感谢各位的回答。当我说int我的帖子时,我的意思是任何 4 字节的整数。例如,如果我存储 30665,我希望得到 15 位的结果。

c++ algorithm bit-manipulation logarithm

7
推荐指数
2
解决办法
3685
查看次数

log2的幂为2的整数

是否有一种有效的方法来查找数字的log2,假设它是2的幂.我知道明显的方法,如有一张桌子或

for (log2=0;x!=1;x>>=1,log2++);
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更有效/更优雅的方式.

c++ algorithm math logarithm

7
推荐指数
1
解决办法
1969
查看次数

找出数字范围内的2个范围的幂?(在C中)

如它是否落在2 ^ 3 - 2 ^ 4,2 ^ 4 - 2 ^ 5等内.返回的数字将是EXPONENT本身(减去偏移量).

如何尽可能快速有效地完成这项工作?这个函数将在一个非常依赖于速度的程序中被调用.这是我当前的代码,但它使用for循环效率太低.

static inline size_t getIndex(size_t numOfBytes)
{
    int i = 3;
    for (; i < 32; i++) 
    {
        if (numOfBytes < (1 << i)) 
            return i - OFFSET;
    }
    return (NUM_OF_BUCKETS - 1);
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你!

c exponent

4
推荐指数
2
解决办法
2758
查看次数

如何在c ++中计算log base 2?

这是我的代码.

#include <iostream>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include <cmath>
#include <functional>
using namespace std;
void main()
{
    cout<<log2(3.0)<<endl;

}
Run Code Online (Sandbox Code Playgroud)

但上面的代码给出了错误.错误代码是:错误C3861:'log2':找不到标识符.如何使用c ++计算log2?

c++

4
推荐指数
2
解决办法
2万
查看次数

警告:内置函数log2的不兼容的隐式声明

所以我们在C中有这个程序,我们需要使用base-2对数函数,得到n的基数2的对数.这是代码:

#include <math.h>

int partSize(int n) {
    return log2(n);
}
Run Code Online (Sandbox Code Playgroud)

但是在编译时,它会给我们以下警告.

sim.c:在函数中partSize:sim.c:114:警告:内置函数的不兼容隐式声明log2

这是我们使用的命令

 gcc $file -o $name.out -lm 
Run Code Online (Sandbox Code Playgroud)

c compiler-errors logarithm

0
推荐指数
1
解决办法
3865
查看次数

C语言以2为底的对数

请问,有人可以帮我如何用 C 计算简单的 log2 吗?我尝试使用这段代码,但它不起作用:

printf( "log( %f ) = %f\n", x, log2(x) );
Run Code Online (Sandbox Code Playgroud)

c logarithm

0
推荐指数
1
解决办法
1万
查看次数