我决定学习fortran95语言(原因并不重要)。 不过作为一名初学者,我遇到了一个奇怪的问题,我真的无法解释,因此我需要帮助。fortran 95围绕自己的
我有插入排序算法:
subroutine insertion_sort_REAL4(array, array_len)
implicit none
!parameners
integer :: array_len
real (kind=4), dimension(array_len) :: array
!variables
integer :: i,key,hole_pos
do i = 0,array_len
key = array(i)
hole_pos = i;
do while ((hole_pos > 0.0) .and. (key < array(hole_pos - 1)))
array(hole_pos) = array(hole_pos - 1)
hole_pos = hole_pos - 1
end do
array(hole_pos) = key
end do
return
end
还有主程序(节选):
real (kind = 4), dimension(3) :: x
x(1) = 3.1
x(2) = 4.3
x(3) = 5.4
write(*,*) 'Array = ',x
call insertion_sort_REAL4(x,3)
write(*,*) 'Array = ',x
第一write
语句打印出来
Array = 3.09999990 4.30000019 5.40000010
为什么数字有轻微变化? fortran95默认不使用IEEE754标准吗?
但是,让我们说,我可以忍受轻微的变化;第二条write
报表打印出来
Array = 3.00000000 4.00000000 5.00000000
为什么数字被四舍五入? 这真的让我感到困扰,格式化'写'声明没有任何好处,谷歌搜索没有真正帮助。我想在互联网上没有那么多关于fortran的东西,因为它是C.我是一个体面的C程序员,所以任何相似的东西都会被赞赏。 谢谢你的帮助!
又是那一天。必须的链接:[每个计算机科学家应该知道的关于浮点算术](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – ppeterka
在这种情况下,但他没有做任何浮点运算。这些值将被精确地保留下来(如果不是意想不到的类型转换)。 – agentp