问题描述
我有一个Fortran程序,我需要修改,所以我正在阅读并试图理解。你可以解释下面语句中的格式化字符串是什么意思:$ $ $ $ $ $ $ $ $ $($,$(1p,(5x,3 (1x,g20.10)))')x(jr,1:ncols)
不过,你正在写每行三个一般(g)格式的浮点数。每个浮点数的总字段宽度为20个字符,小数点右侧为10个位置。大量的数字是指数形式。
1x
s只是简单的添加空格通过增加字段宽度来实现,即 g21.10
,因为数字是正确的, 5x
在这里有点棘手的事情是临时导致 1p
这是一个比例因子。它使得由下面的 g
格式产生的所有指数形式数的尾数乘以10,并且指数相应地改变,即代替默认值
g17.10 - > b0.1234567890E + 12
你得到:
1p,g17.10 - > b1.2345678900E + 11
b
表示输出中的空白。请务必在字段宽度计数器中为 -
留出余地...
的鳞片e大于1小数位数被减少(保留总精度),即
3p,g17.10 - > ; b123.45678900E + 09!注意小数点后面只有8位数
即 1p $ c $购买你的精确度在默认的数字,但你没有得到更多。否定的比例会导致精确度,保留10位:
-7p,g17.10 - > b0.0000000123E + 19
我应该加上 p
比例因子编辑描述符在输入上完全不同。阅读文档...
I have a Fortran program which I need to modify, so I'm reading it and trying to understand. Can you please explain what the formatting string in the following statement means:
write(*,'(1p,(5x,3(1x,g20.10)))') x(jr,1:ncols)
http://www.fortran.com/F77_std/rjcnf0001-sh-13.html
breifly, you are writing three general (g) format floats per line. Each float has a total field width of 20 characters and 10 places to the right of the decimal. Large magnitude numbers are in exponential form.
The 1x
s are simply added spaces (which could as well have been accomplished by increasing the field width ie, g21.10
since the numbers are right justified. The 5x
puts an additional 5 spaces at the beginning of each line.
The somewhat tricky thing here is tha lead 1p
which is a scale factor. It causes the mantissa of all exponential form numbers produced by the following g
format to be multiplied by 10, and the exponent changed accordingly, ie instead of the default,
g17.10 -> b0.1234567890E+12
you get:
1p,g17.10 -> b1.2345678900E+11
b
denotes a blank in the output. Be sure to allow room for a -
in your field width count...
for completeness in the case of scale greater than one the number of decimal places is reduced (preserving the total precision) ie,
3p,g17.10 -> b123.45678900E+09 ! note only 8 digits after the decimal
that is 1p
buys you a digit of precision over the default, but you don't get any more. Negative scales cost you precision, preserving the 10 digits:
-7p,g17.10 -> b0.0000000123E+19
I should add, the p
scale factor edit descriptor does something completely different on input. Read the docs...
这篇关于Fortran:你能解释一下这个格式化字符串吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!