Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Double precision with g77.

6 views
Skip to first unread message

Kengo MIYAMOTO

unread,
Mar 28, 1998, 3:00:00 AM3/28/98
to

宮本@東北大 と申します。

g77(0.5.20, 0.5.22)を使って、以下のような
プログラム(test.f)

double precision ded

ded=dble(-999.9)

write(6,'(f17.10)') ded

stop
end


g77 test.f

の様に、コンパイルし実行すると、

-999.9000244141

のように出力されてしまいます。

-999.9000000000

と出力させるには、どの様にすれば良いのでしょうか?

良く分かりませんが、とりあえず

f2c test.f
gcc test.c -lf2c -lm

とやると、

-999.9000000000

と出力されました。また、上のプログラム(test.f)の2行目の

ded=dble(-999.9)

ded=-999.9

とすると、f2cによって作られたCプログラム(test.c)中では

ded = -999.9;

であったのが

ded = (float)-999.9;
^^^^^^^
となり、

-999.9000244141

と出力されるようになります。

g77でも、ちゃんと倍精度を利用できるようにするのには
どの様にすれば良いかお教え下さい。


miya...@pol.geophys.tohoku.ac.jp
宮本健吾

OKAMURA Hiroyuki

unread,
Mar 29, 1998, 3:00:00 AM3/29/98
to

<6fim8f$o...@hirose.gw.tohoku.ac.jp>の記事において
miya...@pol.geophys.tohoku.ac.jpさんは書きました。

> g77でも、ちゃんと倍精度を利用できるようにするのには
> どの様にすれば良いかお教え下さい。

double precision ded
- ded=dble(-999.9)
+ ded=-999.9D0
write(6,'(f17.10)') ded

dble は所詮関数であって(C の cast に相当するものではない)、
-999.9 が単精度で与えられている以上、g77 の動作は言語仕様に
反してないと思います。定数の代入で勝手に型整合を採るのは
Fortran77 コンパイラの拡張仕様で、(詳しくは知らないんですが)
Fortran90 ではもっと厳密に扱うんじゃないでしょうか。手近な
コンパイラで試した所、Digital UNIX 4.0, Solaris 2.6 共に、
f77 では -999.9000000000、f90 では -999.9000244141 と表示
されました。

この辺の事情は g77.info の Language - Constatns 辺りに書いて
あったと思います。g77 を f77 コンパイラとして使うのであれば、
(世に流布している f77 コンパイラと較べると他にも色々“クセ”
が有りますから) info を一読される事をお薦めします。

---------
岡村 弘之 oka...@phys.s.u-tokyo.ac.jp
東京大学理学部物理 oka...@timshel.riken.go.jp
(↑に居るのもあと二日)

Yasuki Arasaki

unread,
Apr 2, 1998, 3:00:00 AM4/2/98
to

In article <6fim8f$o...@hirose.gw.tohoku.ac.jp>
miya...@pol.geophys.tohoku.ac.jp (Kengo MIYAMOTO) さんwrote:

>> ded=dble(-999.9)
>> write(6,'(f17.10)') ded

>> -999.9000244141

>> -999.9000000000

>> g77でも、ちゃんと倍精度を利用できるようにするのには
>> どの様にすれば良いかお教え下さい。

結論から言えば

ded=-999.9d0

でdedに-999.9000000000が入ります。
「d」指数を付けてない実定数は単精度型です。
dbleで型変換しても値は変わらないはずなので、
g77の方が正しい動作をしていると思います。
--
新崎@東大総文
ara...@mns2.c.u-tokyo.ac.jp

0 new messages