gpt4 book ai didi

c++ - * 1233 >> 12 在这个计算十进制数字的代码中背后的数学是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:34 26 4
gpt4 key购买 nike

我有点困惑 short function来自 C++ {fmt} library有效。

inline std::uint32_t digits10_clz(std::uint32_t n) {
std::uint32_t t = (32 - __builtin_clz(n | 1)) * 1233 >> 12;
return t - (n < powers_of_10_u32[t]) + 1;
}

我理解你可以使用 log2(__builtin_clz) 来近似 log10 并且你需要调整精确值的逻辑,但乘法对我来说是个谜.

最佳答案

召回the formula for changing the base of logarithmbd

logdx = logbx/logbd

在我们的例子中,b 是 2(二进制),d 是 10(十进制)。因此,您需要除以 log210,这与乘以 1/log210 相同,即乘以 0.30102999566。

现在回想一下,移动 12 等于除以 212,即 4096。1233 除以 4096 得到 0.30102539062,这是基本变化公式中分母的一个很好的近似值.

关于c++ - * 1233 >> 12 在这个计算十进制数字的代码中背后的数学是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47786128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com