【发布时间】:2013-08-31 04:10:04
【问题描述】:
我正在尝试将所有浮点数生成到 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;
}
这是行不通的,因为 FLT_EPSILON 破坏了数字的精度,对于 FLT_MIN,它需要一个巨大的跳跃,并且在达到 FLT_MAX 之前它会停止添加太多。
我考虑过在二进制形式上工作和添加,只是跳过特殊含义(inf、-inf、NaN),但我也不确定哪种方法最好。您建议如何生成数字?
【问题讨论】:
-
您确实意识到会生成一个 40-80GB 大小的文件,对吗?
-
您可能会发现Bruce Dawson's articles 很有用;它包括迭代所有浮点(单精度)值的示例。
-
每个没有指数字段全一的 32 位模式代表一个有限数。
-
关于文件大小...是的,这主要是出于好奇,但我仍将使用迭代进行一些数值分析的实际测试(在较小的范围内)。
标签: c++ floating-point numeric