我需要从Fortran 77程序向文本文件输出大量(> 2000万)浮点值。我想保持输出文件尽可能小。因此,我想以一种紧凑的方式输出浮点数,而不需要使用二进制文件。
我知道我需要的精度(通常是小数点右边两位数),所以在C中我会使用printf("%.2f %.2f", val1, val2);
在Fortran 77中是否可以这样?我发现的只是我必须明确设置字段宽度(如format (f8.2,x,f8.2)
中所示)。当我事先不知道输出数字的范围时,这会浪费大量空间。
如果在Fortran 77中无法实现,那么较新的Fortran标准是否提供了这样做的方法?
答案 0 :(得分:3)
Fortran 2008标准允许编辑描述符,例如f0.2
,输出是最小可能的字段宽度,写入数字的整个部分,后跟小数点和两个小数位。我认为这是自Fortran 90以来语言标准的一部分,可能更长。
答案 1 :(得分:0)
如果你有一个数字X,则INT(LOG10(X))+ 1是你的数字的整数部分的大小(整数部分的位数)。因此,您只需为要打印的每个值制作一些自定义FORMAT标签。
它不是很优雅,但我认为它会帮助你达到你想要的效果。
答案 2 :(得分:0)
我知道这可能是迂腐无助的,但是听我说。听起来你做的很糟糕。如果您的仪器正在吐出从1000.00到0.01的数字,那么您的仪器可能只精确到百分之一。因此,数字9894.36应该舍入到9900(无小数点)。所有其他数字都不重要。为什么这相关且有帮助?因为如果要存储9894.36,则会浪费存储空间。所以,答案是使用g编辑描述符,它以科学记数法输出。那么你的所有数字都会占用相同的空间。