四个实数从小到大排列,结果发现排列后的数与原本的数有小小的差异

四个实数从小到大排列,结果发现排列后的数与原本的数有小小的差异,搞不懂是为什么,怎么可以避免这种情况?

以下是主体代码:(fortran语言)

REAL :: a,b,c,d,max1,min1,max2,min2,e1,e2,e3,e4
Read(*,*) a,b,c,d
IF(a>b) THEN
    max1=a
    min1=b
ELSE
    max1=b
    min1=a
END IF
IF(c>d) THEN
    max2=c
    min2=d
ELSE
    max2=d
    min2=c
END IF
IF(max1>max2) THEN
    e4=max1
ELSE
    e4=max2
END IF
IF(min1<min2) THEN
    e1=min1
ELSE
    e1=min2
END IF
IF((max1+max2-e4)>(min1+min2-e1)) THEN
    e3=max1+max2-e4
    e2=min1+min2-e1
ELSE 
    e3=min1+min2-e1
    e2=max1+max2-e4
END IF
WRITE(*,*)  'smaller to larger:',e1,e2,e3,e4

图片说明

实数在计算机里存储本来就存在一定误差,你在排序过程中又进行了计算,误差进一步积累导致误差放大了,
排序的算法很多,建议不要通过计算来决定大小顺序,