Floating point 隐式实数转换为整数(IBM)-Fortran IV

Floating point 隐式实数转换为整数(IBM)-Fortran IV,floating-point,integer,fortran,type-conversion,fortran77,Floating Point,Integer,Fortran,Type Conversion,Fortran77,我正在将一个旧的IBM Fortran程序重写为现代Fortran-90,我遇到了以下表达式: N1=A/B+1.000001 N2=A/B+1. -1.E-5 N3=A/B+1.E-05 据我所知,在旧的Fortran隐式声明方式中,以I-N开头的变量被视为整数。这意味着我们正在研究从浮点数A,B到整数N1-N3的隐式转换 我现在的问题是,如何使用显式实整数转换来转换这些表达式? 我的尝试是: N1=ceiling(A/B+1.) N2=floor(A/B+1.) N3=ceiling(A/

我正在将一个旧的IBM Fortran程序重写为现代Fortran-90,我遇到了以下表达式:

N1=A/B+1.000001
N2=A/B+1. -1.E-5
N3=A/B+1.E-05
据我所知,在旧的Fortran隐式声明方式中,以
I
-
N
开头的变量被视为整数。这意味着我们正在研究从浮点数
A
B
到整数
N1
-
N3
的隐式转换

我现在的问题是,如何使用显式实整数转换来转换这些表达式? 我的尝试是:

N1=ceiling(A/B+1.)
N2=floor(A/B+1.)
N3=ceiling(A/B)
有人能澄清一下吗?我还没有在网上找到任何关于这个的提示


谢谢

类型转换内在函数“int”更改值的方式与整数赋值相同


虽然仍然支持隐式类型化,但我认为它是“旧的”。最好避免使用“隐式无”。

类型转换内在函数“int”更改值,就像赋值给整数一样


虽然仍然支持隐式类型化,但我认为它是“旧的”。最好避免使用“implicit none”(隐式无)。

老实说,我不确定在使用更高的浮点精度(即双精度变量)时,
int()
是否会产生正确的结果。我认为上面的代码是在玩弄这样一个事实,即浮点数的精度有限,我认为,
1.+-1E-4
,这让我认为
floor()
天花()
是一种故意的行为。当然,这是一种不受欢迎的编码方式,但根据第一个变量字母的隐式声明仍然是有效的代码,这让我删除了旧的行为。不,隐式转换与
int
相同。它是一个泛型函数,适用于所有实数类型和其他数值类型,就像其他函数一样。是的,我知道。当使用隐式转换时,超过点的数字会被截断,这就是
int
所做的。但是,再一次强调一下,
+1.E-5
-1.E-5
的意义是什么?@Jost,由于浮点精度是有限的,它可能是一些像
3.0
这样的数字在内部存储,比如
2.9999987
之类的东西。整数截断将导致值
2
,而不是
3
。这就是为什么要加上一个小的修正,只是为了增加尾数中一些最低有效位。(注意:这个例子非常糟糕,因为3.0在IEEE 754中可以精确地表示为1.1_2 x 2^1,但仍然显示了一般的想法)。老实说,我不确定使用更高的浮点精度时,
int()
是否会得到正确的结果,即
双精度
变量。我认为上面的代码是在玩弄这样一个事实,即浮点数的精度有限,我认为,
1.+-1E-4
,这让我认为
floor()
天花()
是一种故意的行为。当然,这是一种不受欢迎的编码方式,但根据第一个变量字母的隐式声明仍然是有效的代码,这让我删除了旧的行为。不,隐式转换与
int
相同。它是一个泛型函数,适用于所有实数类型和其他数值类型,就像其他函数一样。是的,我知道。当使用隐式转换时,超过点的数字会被截断,这就是
int
所做的。但是,再一次强调一下,
+1.E-5
-1.E-5
的意义是什么?@Jost,由于浮点精度是有限的,它可能是一些像
3.0
这样的数字在内部存储,比如
2.9999987
之类的东西。整数截断将导致值
2
,而不是
3
。这就是为什么要加上一个小的修正,只是为了增加尾数中一些最低有效位。(注:此示例非常糟糕,因为3.0在IEEE 754中完全可以表示为1.1_2 x 2^1,但仍然显示了总体思路)。