Path: coconuts.jaist!wnoc-tyo-news!news.nc.u-tokyo.ac.jp!ecc.u-tokyo!komaba!news.c.u-tokyo.ac.jp!makino From: makino@chianti.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.lang.fortran Subject: Re: f77 で四捨五入した結果を出力したい (In Japanese/Kanji) Date: 01 Aug 1997 04:47:57 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 46 Distribution: fj Message-ID: References: <5roq60$6qa@shiogw.fsm.shionogi.co.jp> NNTP-Posting-Host: muscat.c.u-tokyo.ac.jp In-reply-to: Katsunari Hirano's message of 31 Jul 1997 10:36:00 +0900 Xref: coconuts.jaist fj.lang.fortran:1427 >>>>> On 31 Jul 1997 10:36:00 +0900, Katsunari Hirano said: > 塩野義製薬の平野と申します。 > SPARC Compiler(f77 v4.0) に関して質問させていただきます。 > Compiler は、Sun の Ultra Enterprise (OS Solaris 2.5.1) > 上で利用しています。 > 計算結果をフォーマット付き(例えば、f8.2など)で出力する際に、 > 表示桁の次の桁で四捨五入した結果を出力したいのですが、この > ようなことは簡単にできるのでしょうか ? えっと、言語仕様としては、内部表現を正しく四捨五入した結果が出力 されるはずなんでしたっけ?下の動作はそういう意味では正しいように おもうのですが。 > 実際には、次のようなプログラムで困っています。 > ----- > IMPLICIT DOUBLE PRECISION (A-H,O-Z) > dimension x(10) > x(1)=6.15 > x(2)=6.25 > x(3)=6.35 > x(4)=6.45 > x(5)=6.55 > x(6)=6.65 > x(7)=6.75 > x(8)=6.85 > x(9)=6.95 > do i =1, 9 > write(6,100) i, x(i) > end do > 100 format('x(',i1,')=',f7.1) > end つまり、たとえば 6.35 の場合、2進数では循環小数になるので最初の x(3)に代入される時点で四捨五入が起きるはずです。この時に切捨てが 起きていれば、 x(3)の中身は 6.35 よりも小さいので、表示のときに丸 めるとかならず 6.3 にむかって丸められるわけです。 上のプログラムの場合は、問題は出力時に起きているわけではなく、入 力時に起きていると考えるべきではないでしょうか。 牧野@東大駒場