Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 如何独立设置整数和小数精度?_Fortran_Fortran2008 - Fatal编程技术网

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

Fortran 如何独立设置整数和小数精度?,fortran,fortran2008,Fortran,Fortran2008,我正在学习Fortran(使用Fortran 2008标准),并希望独立设置实变量的整数部分精度和小数部分精度。我该怎么做 例如,我想声明一个实变量,它的整数部分精度为3,小数部分精度为8 上述规范中的示例数字为123.12345678,但1234.1234567不能满足给定要求。Fortran实数是浮点数。浮点数不存储整数部分和小数部分。它们存储一个有效位和一个指数 看看浮点数是如何工作的CPU通常使用一种浮点数格式,您不能简单地选择另一种 您所要求的更像是定点算法,但现代CPU和Fortra

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

例如,我想声明一个实变量,它的整数部分精度为3,小数部分精度为8


上述规范中的示例数字为123.12345678,但1234.1234567不能满足给定要求。

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

看看浮点数是如何工作的CPU通常使用一种浮点数格式,您不能简单地选择另一种

您所要求的更像是定点算法,但现代CPU和Fortran本身并不支持它


您可以在各种库(甚至可能是Fortran)或语言中使用它们,但它们并不是真正的本地语言。它们可能是在软件中实现的,而不是直接在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

对于实数,Fortran仅以浮点形式定义。在这样的模型中,我不清楚整数和小数部分的独立精度是什么意思。你能用一个例子来澄清吗?[当然,你可以用某些方式使用非内在的东西。]你是指小数部分和指数部分(而不是整数部分)?@francescalus,我在description@SteveES我添加了一个示例,请现在查看描述。为什么您希望您的数字格式是这样的?你想用它们做什么?这是用于计算还是用于输出?谢谢你的回答,我有一个后续问题:所以现在我使用selected_real_kind(16)的返回值来使用kind参数指定精度,但是当我打印计算结果时,它似乎在使用定点算术。例如:由于我设置了selected_real_kind(16),3.14**3.14给出了36.3378388801746960712,而10.12**10.12给出了14873966072.8729692074,其中我在程序的后续运行中将实数变量“ar”设置为3.14和10.12,这只是一种误解。请注意,
10.12
是一个单精度(默认)实数常量,除非您使用特定类型声明它。看不,这不是真的!!!请仔细阅读。无论是哪种类型的
ar
。10.12是单精度!还请阅读更简单的内容。@anuvaramban这正是您在浮点运算中所期望的,它保持相同数量的有效数字(二进制)。定点算术丢失了显著的图形精度(小的数字当然),但保留小数点精度。@ AuvalaBAN也请记住,输出上的数字格式与它的表示方式不一样,请考虑使用<代码> {} /Cuth>按钮来适当地格式化代码。