gpt4 book ai didi

c++ - C++中最后一个地方有计算单元的标准函数吗?

转载 作者:太空狗 更新时间:2023-10-29 22:54:41 28 4
gpt4 key购买 nike

对于一个数字 x在二进制 float 系统中,最后一位的单位定义为ulp(x) = 2^{E(x)} * 2^{1 - p} = 2^{E(x)}*epsilon ,其中 指数是用于表示 x 的以 2 为底的指数, p是数字格式的精度( double 格式为 53),epsilon = 2^{1-p}是机器公差。

查看std::numeric_limits我希望找到类似 std::numeric_limits<double>::ulp(x) 的东西,但这似乎不可用。或者类似 std::numeric_limits<double>::exponent(x) 的东西我可以乘以 std::numeric_limits<double>::epsilon()但它不在那里。 ulp功能似乎在 boost 中可用.

I can code something myself ,但我宁愿使用标准化代码,如果有的话。我是否遗漏了文档中的某些内容?

编辑:为了更清楚,我说的是计算 float 的指数x , 没有得到 min_max_ float 格式(类型) 的指数范围。

最佳答案

标准库确实没有 ulp功能。

2^{E(x)}*epsilon

可以通过以下方式计算:

int exp;
std::frexp(std::fabs(x), &exp);
double result = std::ldexp(std::numeric_limits<double>::epsilon(), exp - 1);

警告:这仅适用于普通浮点值。对于非正规值,甚至可能不存在可以表示 ULP 的浮点值。


I expected to find something like std::numeric_limits<double>::ulp(x), but this seems to be unavailable. Or something like std::numeric_limits<double>::exponent(x)

numeric_limits仅包含常量(或返回常量的函数)。它没有任何执行计算的函数,因此也没有接受输入值的函数。 <cmath> header 具有计算功能。


一般读者的旁注:如果您的目的是查找下一个/上一个可表示值,请使用 nextafter函数族而不是添加/减去 ULP。

关于c++ - C++中最后一个地方有计算单元的标准函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54460727/

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