我正在学习 Fortran(使用 Fortran 2008 标准),并且想独立设置实变量的整数部分精度和小数部分精度。我该怎么做呢?
例如,假设我想声明一个实数变量,其整数部分精度为 3,小数部分精度为 8。
上述规范中的示例数字是 123.12345678,但 1234.1234567 不满足给定要求。
我正在学习 Fortran(使用 Fortran 2008 标准),并且想独立设置实变量的整数部分精度和小数部分精度。我该怎么做呢?
例如,假设我想声明一个实数变量,其整数部分精度为 3,小数部分精度为 8。
上述规范中的示例数字是 123.12345678,但 1234.1234567 不满足给定要求。
Fortran 实数是浮点数。浮点数不存储整数部分和小数部分。它们存储有效数和指数。
了解浮点数是如何工作的http://en.wikipedia.org/wiki/Floating-point_arithmetic您的 CPU 通常使用一种浮点格式,您不能简单地选择其他格式。
您所要求的更像是 FIXED 点算术,但现代 CPU 和 Fortran 本身并不支持它。https://en.wikipedia.org/wiki/Fixed-point_arithmetic
您可以在各种库(甚至可能是 Fortran)或语言中使用它们,但它们不是原生的 REAL。它们可能是在软件中实现的,而不是直接在 CPU 中实现的,而且速度较慢。
我最终为此编写了一个函数,以便在不实际修改浮点数的情况下将浮点数与.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