Fortran的提示图标我的输出为星号 - 为什么?(Fortran splats my outpu

2019-08-18 03:10发布

我有一个很难包装我的头周围的Fortran格式报表。

没有格式化我的输出,这是我做什么(在循环中,所以这种情况发生过几次):

write(*,*) t*1E9

t这里是real*8 。 输出正是我所期待 - 增量为0.1,具有一定的舍入误差:

0.0000000000000000     
0.10000000000000001     
0.20000000000000001     
0.29999999999999999     
0.40000000000000002     
0.50000000000000000     
0.59999999999999998     
0.69999999999999996     
0.79999999999999993     
0.89999999999999991     
0.99999999999999989

现在,我尝试添加格式语句:

write(*, '(F1.2)') t*1E9

和(与其他一切相同),而不是我只得到星号在我的输出:

**
**
(etc...)

我试图就如何实现这一工作的阅读了,我想不通为什么发生这种情况。 我试过格式的更多的空间位数( F15.15只是给了我每行多个星号),我已经试过移动的格式声明了自己,标线...我只是似乎无法得到输出我想要。

我缺少的是在这里吗?

Answer 1:

Fortran的报表格式定义如下:

Fw.d ,其中w是字符数在总被使用,并且d是字符的小数点后的位数。 在这里,你告诉它,你需要一个浮动,即1个字符宽个,并且小数点后2个字符,这东西显然是不正确的。 因此,要获得,例如浮动即共4个字符,其中3位小数,你会写:

write(*, '(F4.3)') t*1E9

见http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html

另外,我要提的是,星号表示该号码不能在规定的格式显示。

编辑:

添加在从下面乔治的评论:

“为电子格式fieldwidth必须大于小数位数,如E15.8至少7个四的指数,二为0领先一个可能的。‘ - ’我通常添加一个额外的空间所以数字不同时运行,E16.8"



文章来源: Fortran splats my output to asterisks - why?