Убого:
MODULE Power;
PROCEDURE Do*(x: REAL; n: INTEGER): REAL;
VAR y: REAL; i: INTEGER;
BEGIN
ASSERT(n >= 0);
y := 1.0; i := n;
WHILE i > 0 DO
IF ODD(i) THEN y := y*x END;
x := x*x; i := i DIV 2
END
RETURN
y
END Do;
END Power.
Уже лучше:
power ← f R N R { (x n)
(y) ← 1.0
(↺) n > 0 {
n|2 = 1 ? y ×← x
x ×← x
n ÷← 2
}
y
}
Божественно:
power ← {
⍵=0 : 1
(1 ⍺)[1+2|⍵] × (⍺×⍺) ∇ ⌊⍵÷2
}
Комментариев нет:
Отправить комментарий