C++标准(或IEEE 754浮点标准)中有什么保证1./std::numeric_limits<double>::infinity()零(或至少是一个小数字)?
在我的C++程序中,我需要从外部字节序列中提取64位浮点数.有没有办法确保在编译时双打是64位?我应该使用其他类型来存储数据吗?
编辑:如果您正在阅读本文并实际寻找确保以IEEE 754格式存储的方法,请查看下面的Adam Rosenfield的答案.
考虑:
double f = foo();
double g = -f;
Run Code Online (Sandbox Code Playgroud)
哪里foo()可以返回任何分配给的东西f.
double g = -f;在C和C++中是安全的吗?对于IEEE 754类型,显然是C和C++不限制浮点实现(与Java不同).
如果它是安全的,那么就-g总是比较true有foo()?
(上述情况不适用于int2的补码).
例如,
float a = 1.0;
float b = 1.2;
puts(a == b? "equal": "not equal");
Run Code Online (Sandbox Code Playgroud)
编译器是按位还是通过其他方法处理它?
(我知道通过"=="来确定浮点数的相等性不是一个好的选择,我只是想知道编译器如何处理这种情况.)
我将科学数据转储到文件中.目前我只是将它们与它们在内存中的相同表示倾倒.我已经记录了它们是IEEE754,但是我希望在代码中声明这一点,这样如果它被移植到一个奇怪的架构并与我的文档分开(研究代码被传递),它就会在编译时出错.目前我有
static_assert(sizeof(double)==8), "message");
Run Code Online (Sandbox Code Playgroud)
有没有办法测试IEEE754?这可以是静态断言吗?
从我之前的问题" 浮点精度是否可变或不变? "我收到一条回复说,
C提供DBL_DIG,DBL_DECIMAL_DIG,以及它们的float和long double对应物.DBL_DIG表示最小相对小数精度.DBL_DECIMAL_DIG可以被认为是最大相对小数精度.
我看了这些宏.它们位于标题中<cfloat>.从CPLUSPLUS参考页他们列出了宏float,double和long double.
以下是最小精度值的宏.
FLT_DIG 6 or greater
DBL_DIG 10 or greater
LDBL_DIG 10 or greater
如果我把这些宏面值,我会假设float有最少6小数精度,而double和long double有10最低小数精度然而,作为一个大男孩,我知道,有些事情可能是好得是真的.
因此,我想知道.浮点数,双精度数和长双精度数是否保证最小小数精度,这个最小小数精度是上面给出的宏的值?
如果没有,为什么?
注意:假设我们使用的是编程语言C++.
c++ floating-point minimum language-lawyer floating-point-precision
我有两个浮点(32 位)和双(64 位)的 IEEE754 二进制表示位集。如何将此位集转换为真正的浮点数或双数?
我有一个形式1.0f / x 为xa的浮点除法float。我如何事先检查是否x非常接近0.0f结果将是 +-inf / undefined?我不确定标准限制中的 epsilon 是否足够。
问候。
对于双重或浮动,
1. -inf < inf == true
2. inf + inf == inf
3. -inf - inf == -inf
4. positive / 0.0 == inf
5. negative / 0.0 == -inf
6. any real number < inf == true
7. -inf < any real number == true
这个陈述是真的吗?
我们不知道(inf < inf),但我们可以肯定它不会抛出任何例外.