Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
556 views
in Technique[技术] by (71.8m points)

io - Fortran splats my output to asterisks - why?

I'm having a hard time wrapping my head around formatting statements in Fortran.

Without formatting my output, this is what I do (inside a loop, so this happens a few times):

write(*,*) t*1E9

t here is real*8. The output is just what I'd expect - increments of 0.1, with some rounding errors:

0.0000000000000000     
0.10000000000000001     
0.20000000000000001     
0.29999999999999999     
0.40000000000000002     
0.50000000000000000     
0.59999999999999998     
0.69999999999999996     
0.79999999999999993     
0.89999999999999991     
0.99999999999999989

Now, I try to add a format statement:

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

and (with everything else the same) instead I get only asterisks in my output:

**
**
(etc...)

I've tried to read up on how this should work, and I can't figure out why this is happening. I've tried formats with more space for digits (F15.15 just gives me more asterisks per line), I've tried moving the format statement to its own, labelled line... I just can't seem to get the output I'd like.

What am I missing here?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Fortran format statements are defined as:

Fw.d, where w is the number of characters to be used in total, and d is the number of characters after the decimal point. Here you are telling it that you need a float, that is 1 character wide in total, and 2 characters after the decimal point, something that is obviously not correct. So to get, for example, a float that is 4 characters in total, with 3 decimal places, you'd write:

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

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

Also, I should mention that the asterisks are indicative that the number cannot be displayed in the format stated.

EDIT:

Adding in the comment from george below:

"For E format the fieldwidth has to be at least 7 more than the number of decimals, eg E15.8. Four for the exponent, two for the lead 0. one for a possible '-'. I usually add one more extra space so numbers don't run together, E16.8"


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...