Умножение: Общий случай
This commit is contained in:
16
Верхолин Игорь/README.md
Normal file
16
Верхолин Игорь/README.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Умножение: общий случай
|
||||||
|
## Ссылка на видеоразбор
|
||||||
|
## Код из книги
|
||||||
|
let real_mul x y n =
|
||||||
|
let n2 = n + 2 in
|
||||||
|
let r = n2 / 2 in
|
||||||
|
let s = n2 − r in
|
||||||
|
let xr = x(r)
|
||||||
|
and ys = y (s) in
|
||||||
|
let p = log2 xr
|
||||||
|
and q = log 2 ys in
|
||||||
|
if p = 0 & q = 0 then Int 0 else
|
||||||
|
let k = q + r + 1
|
||||||
|
and l = p + s + 1
|
||||||
|
and m = p + q + 4 in
|
||||||
|
(x(k) ∗/ y(l)) ndiv ( Int 2 ∗∗/ Int m) ;;
|
||||||
61
Верхолин Игорь/mul.rkt
Normal file
61
Верхолин Игорь/mul.rkt
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#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)
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user