\ 4tH library - FLN FLOG - Copyright 2008, 2009 J.L. Bezemer
\ You can redistribute this file and/or modify it under
\ the terms of the GNU General Public License
\ In order to preserve memory, it will abort rather than to
\ include the entire floating point emulation library again.
[UNDEFINED] fln [IF]
[UNDEFINED] float [IF] [ABORT] [THEN]
[UNDEFINED] e [IF] include lib/fpconst.4th [THEN]
FLOAT array epsilon
FLOAT array lbase
: >integer begin fdup 1 s>f f< while lbase f@ f* 1- repeat ;
: integer> begin fdup lbase f@ f< 0= while lbase f@ f/ 1+ repeat ;
: fraction
0 s>f s" 0.5" s>float frot fdup f*
begin
fover epsilon f@ fswap f<
while
fdup lbase f@ f< 0=
if fswap frot fover f+ fswap frot lbase f@ f/ then
fswap 2 s>f f/ fswap fdup f*
repeat fdrop fdrop
;
: (log)
lbase f! s" 1e-24" s>float epsilon f!
fdup f0< if FE.INVALID ferror ! exit then
0 >integer integer> fraction s>f f+
;
: fln e (log) ;
: flog 10 s>f (log) ;
[DEFINED] 4TH# [IF]
hide >integer
hide integer>
hide epsilon
hide lbase
hide fraction
[THEN]
[THEN]
|