gpt4 book ai didi

c++ - 如何找到 double 值中第一个的位置?

转载 作者:行者123 更新时间:2023-12-02 09:58:25 25 4
gpt4 key购买 nike

如何通过给定值(例如0.00 ... 001)找到1的位置?
我有这样的示例代码:

constexpr int PrecisionFromDouble(double val)
{
int d = 1.0 / val;
int log = 0;

while (true)
{
d = d / 10;
if (d == 0)
break;
++log;
}
return log;
}
它适用于以下值:
static_assert(PrecisionFromDouble(0.0001) == 4);
static_assert(PrecisionFromDouble(0.001) == 3);
static_assert(PrecisionFromDouble(0.01) == 2);
static_assert(PrecisionFromDouble(0.1) == 1);
static_assert(PrecisionFromDouble(1.0) == 0);
但不适用于0.00001,因为 d变为9999。
编辑1:
函数第一行中的 std::round效果更好:
    int d = static_cast<int>(std::round(1.0 / val));
这应该适用于最多双字面量,例如0.00..001

最佳答案

我认为您可以使用log10

#include <math.h>
constexpr int PrecisionFromDouble(double val)
{
return -(int)log10(val);
}

关于c++ - 如何找到 double 值中第一个的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64018651/

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