且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Fortran:你能解释一下这个格式化字符串吗?

更新时间:2023-11-09 22:47:10

http://www.fortran.com/F77_std /rjcnf0001-sh-13.html



不过,你正在写每行三个一般(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 1xs 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...