- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试找到用 C 语言计算以下内容的最快方法:
p = 2^(ceil(log2(x)));
到目前为止,通过查看 Stack overflow(和其他地方)中的答案,我已经做到了这一点:
#define LOG2(X) ((int) (8*sizeof (unsigned long long) - __builtin_clzll((X)) - 1))
int p = 1 << LOG2( (unsigned long long)x );
x
将始终是一个整数(int
类型)并且大于零。我从这个计算器中得到了 LOG2 解决方案 question .有几个很好的答案,但所有答案似乎都在四舍五入(包括这个)。我需要四舍五入。我对修改它们以进行汇总的解决方案不够满意。任何帮助将不胜感激!!!!
最佳答案
我很确定:
2^(ceil(log2(x)))
可以读作大于或等于 x
的最小幂,但 x
为零且未定义的情况除外。
在这种情况下,可以通过以下方式找到它:
unsigned int fn (unsigned int x) {
if (x == 0) return 0;
unsigned int result = 1;
while ((result < x) && (result != 0))
result <<= 1;
return result;
}
相对高效,数据类型中的每个位数最多需要一次迭代(例如,32 位整数为 32)。
这将返回正确的 2 的幂,或者错误时返回零(如果输入数字为零,或者结果无法用数据类型表示)。
您可以在以下程序中看到它的运行情况:
#include <stdio.h>
#include <limits.h>
unsigned int fn (unsigned int x) {
if (x == 0) return 0;
unsigned int result = 1;
while ((result < x) && (result != 0))
result <<= 1;
return result;
}
int main (void) {
printf ("%u -> %u\n\n", 0, fn(0));
for (unsigned int i = 1; i < 20; i++)
printf ("%u -> %u\n", i, fn(i));
printf ("\n%u -> %u\n", UINT_MAX, fn(UINT_MAX));
return 0;
}
哪些输出:
0 -> 0
1 -> 1
2 -> 2
3 -> 4
4 -> 4
5 -> 8
6 -> 8
7 -> 8
8 -> 8
9 -> 16
10 -> 16
11 -> 16
12 -> 16
13 -> 16
14 -> 16
15 -> 16
16 -> 16
17 -> 32
18 -> 32
19 -> 32
4294967295 -> 0
关于C : Fast Exponentiation (Power 2) + Binary Logarithm (Rounded up) for Integers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30496082/
假设您要计算 5^65537而不是相乘 5 65537次,建议做((5^2)^16)*5 .这导致 16 次平方和 1 次乘法。 但我的问题是你不是通过对非常大的数字进行平方来补偿平方次数吗?当您进入
寻找一种使用 Esper (EPL) 语句计算 5 个 EMA5 和 EMA20 窗口内的指数移动平均线的方法。 我收到了价格事件流(时间戳、交易品种和价格),我在 5 的滑动窗口上编写了一个简单移动
我有一组值遵循 exponential distribution .现在,我想计算速率参数 alpha。谁能帮我计算一下(我正在使用 C++ 编写代码)? 最佳答案 如果您知道这些值来自指数分布,那么
我在两台不同的机器上安装了 Python3.6,发行版 Anaconda。我不能发誓我使用了相同的安装程序文件,尽管我认为我使用过。当我尝试检查 Python、Anaconda 和 numpy 版本时
我的互斥量实现只是在 CAS 失败时重试(伪代码): while(!compare_and_swap(&mutex, 0, 1)); 但它浪费了太多的 CPU 周期。 我了解到“指数退避”可以提高整体
背景信息 我正在设置一个函数,它根据开始日期和结束日期创建一个日期数组。 该函数将接收开始和结束日期,这些日期首先被格式化为 year-month-dayT12:00:00:00 格式,然后使用 .g
因此,我在这里编写了一个脚本,将学生添加到类(class)中(Google Classroom API)。 students = getStudents('Year10', '10A') # VAR
一个字符串一般有多少个子串? Why does string x [1:n] have O(n^2) subtrings according to the lecture 21 Dynamic Pro
当我减去两个值时,我得到 awk 结果,错误是我得到指数值 2.7755575615629E-17 而不是 0。我缺少应用的任何内容,请提出建议。仅在某些情况下才会发生这种情况,例如 0.66、0.6
我可能遗漏了一些明显的东西,但是如何计算 SAS 中的“幂”? 例如 X 的平方,还是 Y 的立方? 我需要的是变量1 ^ 变量2,但找不到语法...(我使用的是SAS 9.1.3) 最佳答案 明白了
当我减去两个值时,我得到了 awk 结果,错误是我得到的指数值是 2.7755575615629E-17 而不是 0。任何我遗漏的申请,请提出建议。这些情况仅在某些情况下发生,例如 0.66、0.67
我使用 Numpy 的 numpy.random.exponential 函数已有一段时间了。我现在看到 Python 的 random 模块有很多我不知道的功能。它有什么东西可以替代 numpy.r
我正在从事一个 Spring 项目,并且正在尝试为 RabbitMQ 队列实现带有死信的指数退避。 在此过程中,我创建了一个死信队列和一个死信交换 (Fanout),并将原始队列的 x-dead-le
我经常使用以下模式来创建对象 null/undefined省略属性: const whatever = { something: true, ...(a ? { a } : null),
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
我正在阅读 GCM:https://developers.google.com/cloud-messaging/server 其中一项要求是服务器需要能够: 处理请求并使用指数退避重新发送它们。 我的
我们正在使用 Beanstalk 上的工作层来发送 webhook。我们需要使用指数退避,以防在联系第三方时出现任何错误。但是,我不清楚这将如何工作。 如果作业失败并且我调用了 ChangeMes
我需要标记我的 y 轴,以便它首先显示单词“Power”,然后是方括号中的表达式:[micro Volt squared]。 我可以生成我想要的整个标签的单个部分,但是当我想组合它们时遇到了问题: x
如何使用范围(0-99)内的不同分布在 Java 中生成随机数。 我知道标准的 Java.util.Random getNextInt() 使用 Uniform 和 PRNG。我将如何使用 nextG
我知道当 RPC 调用失败时,指数退避是一件好事。到目前为止,在我的 GAE/P 应用程序中,我已经通过使用任务队列实现了指数退避: deferred.defer(function_that_make
我是一名优秀的程序员,十分优秀!