如何生成所有浮点数? 我试图在C++上使用GCC生成所有浮点数。我的第一次尝试是使用FLT_MIN,FLT_MAX&FLT_EPSILON生成它们,代码如下: #include <cfloat> #include <stdio.h> #include <iostream> using namespace std; int main(){ FILE* handle = freopen("todos_los_float.in","w",stdout); for(float x = FLT_MIN; x < FLT_MAX; x = x + FLT_EPSILON) cout << x << endl; fclose(handle); return 0; } #包括 #包括 #包括 使用名称空间std; int main(){ FILE*handle=freopen(“todos\u los\u float.in”,“w”,stdout); 对于(浮动x=FLT_最小值;x

如何生成所有浮点数? 我试图在C++上使用GCC生成所有浮点数。我的第一次尝试是使用FLT_MIN,FLT_MAX&FLT_EPSILON生成它们,代码如下: #include <cfloat> #include <stdio.h> #include <iostream> using namespace std; int main(){ FILE* handle = freopen("todos_los_float.in","w",stdout); for(float x = FLT_MIN; x < FLT_MAX; x = x + FLT_EPSILON) cout << x << endl; fclose(handle); return 0; } #包括 #包括 #包括 使用名称空间std; int main(){ FILE*handle=freopen(“todos\u los\u float.in”,“w”,stdout); 对于(浮动x=FLT_最小值;x,c++,floating-point,numeric,C++,Floating Point,Numeric,研究。然后简单地生成表示有限值的所有不同位模式(跳过所有INFs和NaNs)。即使排除其他问题,循环也只生成正浮点。最小的浮点是-INF,最小的有限浮点是-FLT\u MAX 无论如何,如果您正试图生成所有正有限浮点数,则应执行以下操作: #include <cfloat> #include <cmath> ... float f; for (f=0.0f; f<INFINITY; f = nextafterf(f, INFINITY)) … #包括 #包括 ..

研究。然后简单地生成表示有限值的所有不同位模式(跳过所有
INF
s和
NaN
s)。

即使排除其他问题,循环也只生成正浮点。最小的浮点是
-INF
,最小的有限浮点是
-FLT\u MAX

无论如何,如果您正试图生成所有正有限浮点数,则应执行以下操作:

#include <cfloat>
#include <cmath>
...
float f;
for (f=0.0f; f<INFINITY; f = nextafterf(f, INFINITY)) …
#包括
#包括
...
浮动f;

对于(f=0.0f;f有
std::nextafter

for (float f = 0; f != FLT_MAX; f = std::nextafter(f, FLT_MAX)) { }

您知道这将生成一个40-80GB大小的文件,对吗?您可能会发现它很有用;它包括迭代所有浮点(单精度)的示例值。每个没有指数字段的32位模式都代表一个有限的数字。关于文件大小…是的,主要是好奇,但我仍将使用迭代进行数值分析的一些实际测试(在较小范围内)。谢谢!这真的很有用。我确实只对正数感兴趣,所以这正是我要找的。这是一个细节,但是你的循环体不是为
f==FLT\u MAX
执行的。(a)这不适用于所有浮点实现,而
nextafter
是可移植的。(b)这个答案表示生成位模式,但问题要求使用浮点数。因此,它缺少将位模式转换为浮点数的步骤,这在不违反语言规则的情况下很难做到。