;;;; Unsafe library floating-point operations (module (chicken unsafe flonum) (fp- fp* fp/ fp+ fpgcd fp< fp<= fp= fp> fp>= fpabs fpacos fpasin fpatan fpatan2 fpceiling fpcos fpexp fpexpt fpfloor fpinteger? fplog fpmax fpmin fpneg fpround fpsin fpsqrt fptan fptruncate ;; flonum-decimal-precision flonum-epsilon flonum-maximum-decimal-exponent flonum-maximum-exponent flonum-minimum-decimal-exponent flonum-minimum-exponent flonum-precision flonum-print-precision flonum-radix fpgcd maximum-flonum minimum-flonum ;; ... ) (import (scheme) (except (chicken flonum) fp- fp* fp/ fp+ fpgcd fp< fp<= fp= fp> fp>= fpabs fpacos fpasin fpatan fpatan2 fpceiling fpcos fpexp fpexpt fpfloor fpinteger? fplog fpmax fpmin fpneg fpround fpsin fpsqrt fptan fptruncate) ) (define (fp- x y) (##core#inline_allocate ("C_a_i_flonum_difference" 4) x y)) (define (fp* x y) (##core#inline_allocate ("C_a_i_flonum_times" 4) x y)) (define (fp/ x y) (##core#inline_allocate ("C_a_i_flonum_quotient" 4) x y)) (define (fp+ x y) (##core#inline_allocate ("C_a_i_flonum_plus" 4) x y)) (define (fpgcd x y) (##core#inline_allocate ("C_a_i_flonum_gcd" 4) x y)) (define (fp< x y) (##core#inline "C_flonum_lessp" x y)) (define (fp<= x y) (##core#inline "C_flonum_less_or_equal_p" x y)) (define (fp= x y) (##core#inline "C_flonum_equalp" x y)) (define (fp> x y) (##core#inline "C_flonum_greaterp" x y)) (define (fp>= x y) (##core#inline "C_flonum_greater_or_equal_p" x y)) (define (fpabs x) (##core#inline_allocate ("C_a_i_flonum_abs" 4) x)) (define (fpacos x) (##core#inline_allocate ("C_a_i_flonum_acos" 4) x)) (define (fpasin x) (##core#inline_allocate ("C_a_i_flonum_asin" 4) x)) (define (fpatan x) (##core#inline_allocate ("C_a_i_flonum_atan" 4) x)) (define (fpatan2 x y) (##core#inline_allocate ("C_a_i_flonum_atan2" 4) x y)) (define (fpceiling x) (##core#inline_allocate ("C_a_i_flonum_ceiling" 4) x)) (define (fpcos x) (##core#inline_allocate ("C_a_i_flonum_cos" 4) x)) (define (fpexp x) (##core#inline_allocate ("C_a_i_flonum_exp" 4) x)) (define (fpexpt x y) (##core#inline_allocate ("C_a_i_flonum_expt" 4) x y)) (define (fpfloor x) (##core#inline_allocate ("C_a_i_flonum_floor" 4) x)) (define (fpinteger? x) (##core#inline "C_u_i_fpintegerp" x)) (define (fplog x) (##core#inline_allocate ("C_a_i_flonum_log" 4) x)) (define (fpmax x y) (##core#inline "C_i_flonum_max" x y)) (define (fpmin x y) (##core#inline "C_i_flonum_min" x y)) (define (fpneg x) (##core#inline_allocate ("C_a_i_flonum_negate" 4) x)) (define (fpround x) (##core#inline_allocate ("C_a_i_flonum_round" 4) x)) (define (fpsin x) (##core#inline_allocate ("C_a_i_flonum_sin" 4) x)) (define (fpsqrt x) (##core#inline_allocate ("C_a_i_flonum_sqrt" 4) x)) (define (fptan x) (##core#inline_allocate ("C_a_i_flonum_tan" 4) x)) (define (fptruncate x) (##core#inline_allocate ("C_a_i_flonum_truncate" 4) x)) )