Fortran 格式 - 数字 < 1e-100 的问题
Fortran format - problem with numbers < 1e-100
当我的程序中的某些数字变小时,我遇到了问题,因为我将它们写在一个文件中并且指数格式变得不同:
例如,数字 > 1e-100:
0.3979111076224349D-98
较小的数字:
0.2306878464709676-101(D消失)
并且由于它被另一个程序读取,所以这些数字无法正确读取。
目前我使用的格式是 3D25.16
一个可能的解决方案是强制 3E25.15E3
问题是我丢失了任何数字的一位数字
我想避免丢失一个数字,我想避免在打印前通过测试损失性能。
还有其他解决办法吗?对我来说,理想的解决方案是一种格式,它在指数上打印 2 位数字,并在 <1e-100 时更改为 3 位数字
其他好的解决方案是将非常小的数字转换为零的格式选项
另外一个疑惑是:从3D25.16改成3E25.15E3时,D改成E会不会失去精度?因为3D25.15E3不接受
谢谢
正如评论中的每个人(以及问题中的您)所说,您可以只使用 E
描述符而不是 D
,因此您可以指定数字的位数指数部分。
Currently I'm using the format 3D25.16 A possible solution would be forcing 3E25.15E3 The problem is that I lose 1 digit for any number
那么,为什么不使用 3E26.15E3
来增加输出的宽度呢?
Other doubt is: when changing from 3D25.16 to 3E25.15E3 do I lose precision by changing D to E?
与3E25.15E3
:是的,你可能会(1 位数)。 3E26.15E3
:不,你没有。
当我的程序中的某些数字变小时,我遇到了问题,因为我将它们写在一个文件中并且指数格式变得不同: 例如,数字 > 1e-100: 0.3979111076224349D-98 较小的数字: 0.2306878464709676-101(D消失)
并且由于它被另一个程序读取,所以这些数字无法正确读取。
目前我使用的格式是 3D25.16 一个可能的解决方案是强制 3E25.15E3 问题是我丢失了任何数字的一位数字
我想避免丢失一个数字,我想避免在打印前通过测试损失性能。
还有其他解决办法吗?对我来说,理想的解决方案是一种格式,它在指数上打印 2 位数字,并在 <1e-100 时更改为 3 位数字 其他好的解决方案是将非常小的数字转换为零的格式选项
另外一个疑惑是:从3D25.16改成3E25.15E3时,D改成E会不会失去精度?因为3D25.15E3不接受
谢谢
正如评论中的每个人(以及问题中的您)所说,您可以只使用 E
描述符而不是 D
,因此您可以指定数字的位数指数部分。
Currently I'm using the format 3D25.16 A possible solution would be forcing 3E25.15E3 The problem is that I lose 1 digit for any number
那么,为什么不使用 3E26.15E3
来增加输出的宽度呢?
Other doubt is: when changing from 3D25.16 to 3E25.15E3 do I lose precision by changing D to E?
与3E25.15E3
:是的,你可能会(1 位数)。 3E26.15E3
:不,你没有。