我決定學習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