2013-06-20 59 views
1

我需要從Fortran 77程序輸出大量(> 2000萬)浮點值到文本文件。我想保持輸出文件儘可能小。因此,我想以緊湊的方式輸出浮點數,而不訴諸二進制。Fortran 77:輸出花樣寬度可變

我知道我需要的精度(通常是小數點右側的兩位數),所以在C中我會使用printf("%.2f %.2f", val1, val2);在Fortran 77中可以這樣做嗎?我發現的是我必須明確地設置字段寬度(如在format (f8.2,x,f8.2)中)。當我事先不知道輸出數字的範圍時,這會浪費很多空間。

如果在Fortran 77中不可行,那麼更新的Fortran標準提供了一種方法來執行此操作?

回答

3

Fortran 2008標準允許使用編輯描述符,如f0.2,其輸出是最小可能的字段寬度,它寫入數字的整個部分,後面跟着一個小數點和兩個小數位。我認爲這是自Fortran 90以來的語言標準的一部分,可能更長。

+1

它出現在[Fortran 95](http://j3-fortran.org/doc/standing/archive/007/97-007r2/pdf/97-007r2.pdf)中(第10.5.1.1節I描述符,對F來說更進一步:在這兩種情況下「*當w爲零時,處理器選擇字段寬度*」。 [Fortran 2003]中的相同措辭(http://www.j3-fortran.org/doc/year/04/04-007.pdf)第1.6.1.1節。確認[這裏](http://fortranwiki.org/fortran/show/Edit+descriptors)。 – 2013-08-27 20:31:48

+0

這也適用於整數,即。 'i0' – DJSquared

0

如果您有一個數字X,則INT(LOG10(X))+ 1是您的數字的整數部分的大小(整數部分的數字位數)。因此,您只需爲要打印的每個值製作一些自定義的FORMAT標籤。

這不是很優雅,但我認爲它會幫助你實現你想要的。

0

我知道這可能會遇到迂腐和無益,但聽我說。這聽起來像你在做不好的科學。如果您的儀器正在將數字從1000.00分配到0.01,那麼您的儀器可能只精確到百分之一。所以9894.36應該四捨五入到9900(無小數點)。所有其他數字都不重要。爲什麼這是相關的和有益的?因爲如果你存儲9894.36,你正在浪費存儲空間。所以,答案是使用g編輯描述符,它以科學記數法輸出。然後你所有的數字將佔用相同的空間。