double a,b
a=2.4
b=-2.7
deff floor
'=========
fld st0
frndint
(
fcomip st1
jz exit
sub esp,8 : fstcw [esp] : fstcw [esp+2] : or [esp],0xc00
fldcw [esp]
fldz
fcomip st1
(
jbe exit
fchs
fld1
faddp st1
)
frndint
(
jbe exit
fchs
)
fldcw [esp+2] : add esp,8
)
end deff
deff ceil
'========
fld st0
frndint
(
fcomip st1
jz exit
fldz
sub esp,8 : fstcw [esp] : fstcw [esp+4] : or [esp],0xc00
fldcw [esp]
fcomip st1
(
jbe exit
fchs
jmp fwd nfld1
)
fld1
faddp st1
.nfld1
'
frndint
(
jbe exit
fchs
)
fldcw [esp+4] : add esp,8
)
end deff
'sign sensitive
'print floor(a) " " ceil(a)
'print floor(b) " " ceil(b)
print floor 2.3 ' 2.0 round down
print floor -2.3 '-3.0 round down
print ceil 2.7 ' 3.0 round up
print ceil -2.7 '-2.0 round up