如何独立设置整数和分数精度?

时间:2017-04-27 11:57:08

标签: fortran fortran2008

我正在学习Fortran(使用Fortran 2008标准),并希望独立地为 real 变量设置我的整数部分精度和小数部分精度。我该怎么做呢?

例如,假设我想声明一个 real 变量,其整数部分精度为3,小数部分精度为8。

上述规范中的示例编号为123.12345678,但1234.1234567不符合给定的要求。

2 个答案:

答案 0 :(得分:2)

Fortran实数是FLOATING点数。浮点数不存储整数部分和小数部分。它们存储有效数和指数。

查看浮点数如何工作http://en.wikipedia.org/wiki/Floating-point_arithmetic CPU通常使用一种浮点格式,你不能简单地选择另一种格式。

你要求的更像是FIXED点算术,但现代CPU和Fortran本身不支持它。 https://en.wikipedia.org/wiki/Fixed-point_arithmetic

您可以在各种库(甚至可能是Fortran)或语言中使用它们,但它们不是原生REAL。它们可能是用软件实现的,而不是直接在CPU中实现,而且速度较慢。

答案 1 :(得分:0)

我最终为此编写了一个函数,以便与.gt. / .lt. / .ge. / .le. / .eq.运算符一起使用浮点运算而没有实际修改了浮点数。

function PreciseInt(arg1, arg2) Result(PreciseInt)
  real*8     arg1       !Input variable to be converted
  integer*4  arg2       !Input # for desired precision to the right of the decimal
  integer*4  PreciseInt !Integer representing the real value with desired precision

  PreciseInt = idnint(arg1 * real(10**arg2))
end function