Floating point 浮点数的NetCDFs回退填充值的重要性,9.96920996683868690E+;36?

Floating point 浮点数的NetCDFs回退填充值的重要性,9.96920996683868690E+;36?,floating-point,netcdf,Floating Point,Netcdf,NetCDF为每种类型定义。对于float和double,它使用9.96920996683868690e+36。起初我认为这可能是浮点中可存储的最大值,但这将是3.4028235e+38,大约大34倍 NetCDF选择的数字是否有任何意义,或者他们可能采用了随机数?建议:找出该数字的十六进制是什么。将其与内存的其他可能用途进行比较 在一台现已废弃的旧机器中,未分配内存的填充是一个位模式,它同时是一个NaN,一条会导致中止的指令,一个错误的地址,等等。因此,无论您如何在RAM中“使用”该单元,都会

NetCDF为每种类型定义。对于float和double,它使用
9.96920996683868690e+36
。起初我认为这可能是浮点中可存储的最大值,但这将是
3.4028235e+38
,大约大34倍


NetCDF
选择的数字是否有任何意义,或者他们可能采用了随机数?

建议:找出该数字的十六进制是什么。将其与内存的其他可能用途进行比较


在一台现已废弃的旧机器中,未分配内存的填充是一个位模式,它同时是一个NaN,一条会导致中止的指令,一个错误的地址,等等。因此,无论您如何在RAM中“使用”该单元,都会立即发生一些不好的事情。

有趣的问题。真正的随机数是行不通的,因为它可能位于许多变量的典型值范围内,这将违反填充值的最佳实践。这就是为什么最佳做法是选择一个绝对大小非常大的数字,这样它就不会与有效数据的动态范围相冲突。我曾经检查过NC_FILL_FLOAT和NC_FILL_DOUBLE的属性,发现它们没有什么特别之处。将它们设置为相等是有意义的,因为用户经常在float和double之间转换。因此,剩下的问题是选择哪一个值。在我看来,最佳选择是接近NC_FLOAT_MAX(或NC_FLOAT_MAX的负值)的数字,该数字具有易于压缩的位模式。由于许多数据集充满了缺失值,因此使用具有相同位的长连续字符串的数字将允许大多数算法更好地压缩此类数据集。使用NC_FILL_FLOAT对数据集进行DEFLATE压缩非常好,因为DEFLATE很好,而二进制中的NC_FILL_FLOAT很好

9.9692099683868690e+36f = 0 1111100 111100000000000000000000
他们可以选择一个稍微可压缩的数字,例如

-2.3509885615147286E-38f = 10000000111111111111111111111111

但他们没有,我也很好奇NC_FILL_FLOAT从何而来。

看起来十六进制是
0x7cf00000
(用确定)。