回 帖 发 新 帖 刷新版面

主题:请教ifort编译双精度

我设置变量为real*8 :: JULIANDAY

然后赋值 JULINDAY=2454133.5
      write(*,*)JULINDAY
利用ifort编译后怎么打印出来的成了2454133?
问题出在哪呢?我用的是linux下的ifort10.1
谢谢

回复列表 (共5个回复)

沙发

我也设了 JULINDAY=2454133.5d0,结果还是一样,小数位没了。

板凳

版主可以删除此贴。奇怪的原因主要是因为我前面的一条注释行位置提前,影响了定义real的命令。

3 楼

在unix下还是有问题,int(134.00000000)取整能成133,然后余数成了0.99999999999,加什么选项才能避免这种情况?

4 楼

int(134.0000000000+0.5)
134.0000000000-int(134.000000000+0.5)

5 楼

[quote]在unix下还是有问题,int(134.00000000)取整能成133,然后余数成了0.99999999999,加什么选项才能避免这种情况?[/quote]

NINT
Elemental Intrinsic Function (Generic): Returns the nearest integer to the argument.

Syntax
result = NINT (a[,kind])

a
 (Input) Must be of type real. 
 
kind
 (Input; optional) Must be a scalar integer initialization expression.
 

Results
The result type is integer. If kind is present, the kind parameter of the result is that specified by kind; otherwise, the kind parameter of the result is shown in the following table. If the processor cannot represent the result value in the kind of the result, the result is undefined.

If a is greater than zero, NINT(a) has the value INT(a+ 0.5); if a is less than or equal to zero, NINT(a) has the value INT(a- 0.5).

我来回复

您尚未登录,请登录后再回复。点此登录或注册