#lang racket (require string-util) (define (acc x n) (* (string->number x) (expt 2 n)) ) (define (n_div x y) (round (/ x y)) ) (define (log2 x) (define (rec x y) (if (< x 1) ;then y ;else (rec (quotient (floor x) 2) (+ y 1)) ) ) (rec (- x 1) 0) ) (define (rround num prec) (string->number (real->decimal-string num prec)) ) (define (rmul x y n) (define (sub_mul) (define k (+ q r 1)) (define l (+ p s 1)) (define m (+ p q n 4)) (rround (/ (* (acc y l) (acc x k)) (expt 2 m)) n) ) (define n2 (+ n 2)) (define r (quotient n2 2)) (writeln r) (define s (- n2 r)) (writeln s) (define xr (acc x r)) (define ys (acc y s)) (define p (log2 xr)) (writeln p) (define q (log2 ys)) (writeln q) (if (and (equal? p 0) (equal? q 0)) ;then 0 ;else (sub_mul) ) ) (rmul "1.0003" "1.0002" 3) ;(el "35.34" 3) ;(acc "4.5" 3)