gpt4 book ai didi

c++ - C++ 可以在内部表示而无需舍入的 0 和 1 之间的最大和最小数字是多少?

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:48 31 4
gpt4 key购买 nike

我有一个基于简单模型计算概率的 C++ 函数。似乎 C++ 倾向于将非常小的概率四舍五入为 0,将非常大的概率四舍五入为 1。这会导致以后的计算出现问题(采用 log(p) 和 log(1-p))。

有没有一种方法可以显式地表示小于 1 的最大数,而 C++ 可以在内部表示而无需四舍五入?同样,大于0的最小数?

我可以这样做:

if (probability == 1) 
probability = 0.999999999;
else if (probability == 0)
probability = 0.000000001;

但这会导致其他数值问题(与累积数字有关)。有没有更有原则的方法,也许使用 numeric_limits?

最佳答案

虽然它的名字可能有点误导, std::numeric_limits<T>::min 是你要找的。对于浮点类型,它将为您提供大于零的最小值。

对于仍然小于 1 的最大数字, 你可以使用 std::nexttoward 如果你使用 C++11:

代码

#include<cstdio>
#include<cmath>
#include<limits>

int main(){
printf("Near 0: %1.20e\nNear 1: %1.20e\n",
std::numeric_limits<double>::min(),
std::nexttoward(1.0, 0.0)
);
return 0;
}

结果

Near 0: 2.22507385850720138309e-308Near 1: 9.99999999999999888978e-01

关于c++ - C++ 可以在内部表示而无需舍入的 0 和 1 之间的最大和最小数字是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253455/

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