2013-03-28 18 views
9

Kafamı Fortran'daki biçimlendirme ifadeleri etrafına dolamakta zorlanıyorum. Benim biçimlendirme çıkışı olmadanFortran, çıkışımı yıldızlara uyarıyor - neden?

, bu benim yaptığım (bir döngü içinde, bu yüzden bu bir kaç kez olur): Burada

write(*,*) t*1E9 

treal*8 olduğunu. Çıktı Ben sadece ne beklediğiniz olduğunu - 0,1 artışlarla, bazı yuvarlama hataları ile:

0.0000000000000000  
0.10000000000000001  
0.20000000000000001  
0.29999999999999999  
0.40000000000000002  
0.50000000000000000  
0.59999999999999998  
0.69999999999999996  
0.79999999999999993  
0.89999999999999991  
0.99999999999999989 

Şimdi, bir biçim deyimi eklemeyi deneyin:

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

ve (her şeyden aynı olan Bu işe nasıl üzerinde okumak için denedim

** 
** 
(etc...) 

ve bu neden oluyor bilemiyorum:) yerine benim çıktısında sadece yıldız işaretleri olsun. Basamaklar için daha fazla alan içeren biçimleri denedim (F15.15 sadece her satırda daha fazla yıldız işareti veriyor), biçim ifadesini kendi etiketli satırına taşımaya çalıştım ... Ben sadece çıktıyı elde edemiyorum. D gibi.

Burada nelerin eksik? w karakter sayısı toplam kullanılmak üzere ve d, ondalık noktadan sonra karakter sayısıdır

Fw.d:

cevap

15

Fortran biçimi ifadeler olarak tanımlanır. Burada bir float ihtiyacınız olduğunu, yani toplamda 1 karakter ve ondalık noktadan sonra 2 karakter olduğunu, açıkça doğru olmayan bir şey olduğunu söylüyorsunuz. Yani almak için, örneğin, 3 ondalık basamakla, toplam 4 karakter olan bir şamandıra, yazmak istiyorum:

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

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

Bak, yıldız işaretleri göstergesidir bahsetmeliyiz sayı belirtilen formatta gösterilemez.

DÜZENLEME: Aşağıdaki george gelen açıklamada ekleme

:

fieldwidth ondalık sayısı, örneğin E15.8 en az 7 daha olmak zorunda E biçimi için

" Dört üs için. , iki olası bir '-' için bir tane için iki tane. Genellikle bir tane daha fazla boşluk eklerim, böylece sayılar birlikte çalışmaz, E16.8 "

+0

Teşekkürler! Bu bir çok şeyi açıklıyor =) Ancak, aynı prensipleri uygularken, örneğin, E5.4, diğer çiftler için (yani 'real * 8's), 1e-2 - 1e-3 büyüklükleri ve 1e2 büyüklük sırasına göre bir sütun ile, bu sütunlar için med yıldız işaretleri verir. sütun beklendiği gibi çalışır). Şu andaki tüm biçim dizgisi: 'F4.2, E10.8, E10.8'. –

+4

E formatı için, alan genişliği ondalık sayılardan en az 7 daha fazla olmalıdır, örn. E15.8. Üs için dört, ikisi kurşun için 0. Bir olası '-' için. Genellikle bir tane daha fazla boşluk ekledim, böylece sayılar birlikte çalışmıyor, E16.8 .. – agentp

+0

Bunu açıklıyor - teşekkürler! –

İlgili konular