[clean-list] Where is floor :: !Real -> Real?
John van Groningen
johnvg at cs.ru.nl
Mon Aug 17 14:56:49 MEST 2009
Vag Vagoff wrote:
>Very important procedures seems to be missing in Clean standard library:
>
> floor :: !Real -> Real
> ceiling :: !Real -> Real
>
>How to fix that?
If the result can fit in an Int use fromInt or toReal and:
entier :: !Real -> Int
to implement floor. Use
~ (entier (~ x))
to compute the ceiling of x.
On a 64 bit computer no rounding is necessary for Real's that are
too large for type Int. So depending on the size use fromInt and entier,
or do nothing.
On computers using the 32 bit intel/AMD instruction set, you can use:
floorR_IA32 :: !Real -> Real;
floorR_IA32 r = code {
| 83 ec 08 sub $0x8,%esp
instruction 131
instruction 236
instruction 8
| 9b d9 3c 24 fstcw (%esp)
instruction 155
instruction 217
instruction 60
instruction 36
| 66 8b 04 24 mov (%esp),%ax
instruction 102
instruction 139
instruction 4
instruction 36
| 66 25 ff f3 and $0xf3ff,%ax
instruction 102
instruction 37
instruction 255
instruction 243
| 66 0d 00 04 or $0x400,%ax
instruction 102
instruction 13
instruction 0
instruction 4
| 66 89 44 24 02 mov %ax,0x2(%esp)
instruction 102
instruction 137
instruction 68
instruction 36
instruction 2
| d9 6c 24 02 fldcw 0x2(%esp)
instruction 217
instruction 108
instruction 36
instruction 2
| d9 fc frndint
instruction 217
instruction 252
| d9 2c 24 fldcw (%esp)
instruction 217
instruction 44
| 83 c4 08 add $0x8,%esp
instruction 36
instruction 131
instruction 196
instruction 8
}
ceilR_IA32 :: !Real -> Real;
ceilR_IA32 r = code {
| 83 ec 08 sub $0x8,%esp
instruction 131
instruction 236
instruction 8
| 9b d9 3c 24 fstcw (%esp)
instruction 155
instruction 217
instruction 60
instruction 36
| 66 8b 04 24 mov (%esp),%ax
instruction 102
instruction 139
instruction 4
instruction 36
| 66 25 ff f3 and $0xf3ff,%ax
instruction 102
instruction 37
instruction 255
instruction 243
| 66 0d 00 04 or $0x800,%ax
instruction 102
instruction 13
instruction 0
instruction 8
| 66 89 44 24 02 mov %ax,0x2(%esp)
instruction 102
instruction 137
instruction 68
instruction 36
instruction 2
| d9 6c 24 02 fldcw 0x2(%esp)
instruction 217
instruction 108
instruction 36
instruction 2
| d9 fc frndint
instruction 217
instruction 252
| d9 2c 24 fldcw (%esp)
instruction 217
instruction 44
| 83 c4 08 add $0x8,%esp
instruction 36
instruction 131
instruction 196
instruction 8
}
Kind regards,
John van Groningen
More information about the clean-list
mailing list