Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Fortran中的h5dcreate_f函数会打印这么多数字?_R_Fortran_Fortran90_Hdf5_Hdf - Fatal编程技术网

为什么Fortran中的h5dcreate_f函数会打印这么多数字?

为什么Fortran中的h5dcreate_f函数会打印这么多数字?,r,fortran,fortran90,hdf5,hdf,R,Fortran,Fortran90,Hdf5,Hdf,我使用的是一个Fortran代码,它在h5文件中写入实类型变量,所以它使用了这段代码 call h5dcreate_f(file_id,varn,H5T_NATIVE_REAL, filespace,dset_id, hdferr) 当然还有其他h5函数,如geth5dims 但我不明白为什么当我使用R或HDFview打开h5文件时,实数变量的精度高达20+位,而不是我从fortran REAL中期望的7位。示例:在fortran中,当我打印出一个变量时,我有0.1662154,但在我的H5文

我使用的是一个Fortran代码,它在h5文件中写入实类型变量,所以它使用了这段代码

call h5dcreate_f(file_id,varn,H5T_NATIVE_REAL, filespace,dset_id, hdferr)
当然还有其他h5函数,如
geth5dims

但我不明白为什么当我使用R或HDFview打开h5文件时,实数变量的精度高达20+位,而不是我从fortran REAL中期望的7位。示例:在fortran中,当我打印出一个变量时,我有0.1662154,但在我的H5文件中,相同的变量是0.166215423415234653524

为什么这些额外的数字,这些数字只是噪音?这很重要,因为我会做进一步的计算,对舍入误差很敏感


在Fortran中使用带有
格式(F30.25)
的write语句,我得到0.0006564661744050681591034,但在R中我得到0.00065646617440506816,如果在Fortran中我只使用write(,)var或print*,var,而我只得到6.565466E-4

你能显示准确的值吗(否“…”),我的猜测是它们正在向上转换为两倍,这对你的精度很好,只要你在回读时使用相同的类型。@agentp你给了我一个很好的线索,但这不是完全的答案,它的作用是,它实际上复制所有的小数到22位,至少这是我从R中看到的,当我用fortran打印值时,我看到它有超过25位小数,所以这个函数写的是X位数,但我不知道有多少。当你用fortran打印任何东西时,你看到的位数是由类型和格式规范决定的。这与hd5中的内容无关。您应该显示生成25位数字的打印/写入语句。也许您应该包括
r
标记。@agentp我已经添加了更多信息。您不必像在讨论线程中那样使用任何编辑或更新。只需编辑问题,使其尽可能清晰完整即可。将信息添加到任何位置,而不仅仅是末尾。任何人都可以单击问题下方的编辑日期来查看完整的编辑历史记录。能否显示准确的值(否“…”),我猜它们将向上转换为两倍,这对您的精度很好,只要您在回读时使用相同的类型。@agentp您给了我一个很好的线索,但这不是答案,它的作用是,它实际上复制了所有的小数,最多22位,至少我可以从R中看到,当我用fortran打印值时,我看到它有25位以上的小数,所以这个函数写的是X位数,但我不知道有多少。当你用fortran打印任何东西时,你看到的位数是由类型和格式规范决定的。这与hd5中的内容无关。您应该显示生成25位数字的打印/写入语句。也许您应该包括
r
标记。@agentp我已经添加了更多信息。您不必像在讨论线程中那样使用任何编辑或更新。只需编辑问题,使其尽可能清晰完整即可。将信息添加到任何位置,而不仅仅是末尾。任何人都可以单击问题下方的编辑日期查看完整的编辑历史记录。