gpt4 book ai didi

c++ - 负无穷大

转载 作者:IT老高 更新时间:2023-10-28 12:36:10 64 4
gpt4 key购买 nike

我试图弄清楚如何将负无穷大的值分配给浮点或 double 变量。似乎包括标准库限制,我可以获得无穷大表示,并且我知道(非常肯定)在它前面添加一个减号(-infinity)可能会导致我在 IEEE754 浮点中寻找的值标准(因为 0x7FFFFFFF 可能会导致 0xFFFFFFFF),但我什至不确定,更不用说可能存在的其他标准(如果有的话)。

有没有什么好的方法可以独立获取负无穷平台的值和实现,不然我还不如用#define,大家都喜欢预处理。

最佳答案

至少如果 std::numeric_limits::is_iec559 (IEEE 754) 是正确的(这保证 std::numeric_limits::has_infinity 也是正确的),您可以按照您已经说明的方式表达正无穷大值和负无穷大值。

来自 Wikipedia 的 IEEE 754-1985 无穷大值的简短说明:

......snip......

The biased-exponent field is filled with all 1 bits to indicate eitherinfinity or an invalid result of a computation.

Positive and negative infinity

Positive and negative infinity are represented thus:

 sign = 0 for positive infinity, 1 for negative infinity.
biased exponent = all 1 bits.
fraction = all 0 bits.

......snip......

断言

以下示例将按预期工作,或者在目标平台不支持 IEEE 754 float 的情况下导致编译时错误。

#include <cstdlib>
#include <cmath>
#include <cassert>
#include <limits>

int main(void)
{
//Asserts floating point compatibility at compile time
static_assert(std::numeric_limits<float>::is_iec559, "IEEE 754 required");

//C99
float negative_infinity1 = -INFINITY;
float negative_infinity2 = -1 * INFINITY;

float negative_infinity3 = -std::numeric_limits<float>::infinity();
float negative_infinity4 = -1 * std::numeric_limits<float>::infinity();

assert(std::isinf(negative_infinity1) && negative_infinity1 < std::numeric_limits<float>::lowest());
assert(std::isinf(negative_infinity2) && negative_infinity2 < std::numeric_limits<float>::lowest());
assert(std::isinf(negative_infinity3) && negative_infinity3 < std::numeric_limits<float>::lowest());
assert(std::isinf(negative_infinity4) && negative_infinity4 < std::numeric_limits<float>::lowest());

return EXIT_SUCCESS;
}

关于c++ - 负无穷大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20016600/

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