ocaml: phase 5.1 bisect.ml baseline (root-finding, sqrt(2)*100 = 141)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 43s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 43s
Bisection method searching for f(x) = 0 in [lo, hi] over 50
iterations:
let bisect f lo hi =
let lo = ref lo and hi = ref hi in
for _ = 1 to 50 do
let mid = (!lo +. !hi) /. 2.0 in
if f mid = 0.0 || f !lo *. f mid < 0.0 then hi := mid
else lo := mid
done;
!lo
Solving x^2 - 2 = 0 in [1, 2] via 'bisect (fun x -> x *. x -. 2.0)
1.0 2.0' converges to ~1.41421356... -> int_of_float (r *. 100) =
141.
Tests:
- higher-order function passing
- multi-let 'let lo = ref ... and hi = ref ...'
- float arithmetic
- int_of_float truncate-toward-zero (iter 117)
62 baseline programs total.
This commit is contained in:
13
lib/ocaml/baseline/bisect.ml
Normal file
13
lib/ocaml/baseline/bisect.ml
Normal file
@@ -0,0 +1,13 @@
|
||||
let bisect f lo hi =
|
||||
let lo = ref lo and hi = ref hi in
|
||||
for _ = 1 to 50 do
|
||||
let mid = (!lo +. !hi) /. 2.0 in
|
||||
if f mid = 0.0 || f !lo *. f mid < 0.0 then hi := mid
|
||||
else lo := mid
|
||||
done;
|
||||
!lo
|
||||
|
||||
;;
|
||||
|
||||
let r = bisect (fun x -> x *. x -. 2.0) 1.0 2.0 in
|
||||
int_of_float (r *. 100.0)
|
||||
@@ -5,6 +5,7 @@
|
||||
"atm.ml": 120,
|
||||
"bag.ml": 3,
|
||||
"bf_full.ml": 6,
|
||||
"bisect.ml": 141,
|
||||
"bigint_add.ml": 28,
|
||||
"bits.ml": 21,
|
||||
"balance.ml": 3,
|
||||
|
||||
Reference in New Issue
Block a user