aboutsummaryrefslogtreecommitdiff
path: root/aberth/aberth_kernel.fut
diff options
context:
space:
mode:
Diffstat (limited to 'aberth/aberth_kernel.fut')
-rw-r--r--aberth/aberth_kernel.fut22
1 files changed, 11 insertions, 11 deletions
diff --git a/aberth/aberth_kernel.fut b/aberth/aberth_kernel.fut
index 9d0c59e..f868ee5 100644
--- a/aberth/aberth_kernel.fut
+++ b/aberth/aberth_kernel.fut
@@ -7,29 +7,29 @@ module uniform_real = uniform_real_distribution f32 rand_engine
module cplx = mk_complex f32
type complex = cplx.complex
-let N = 22i32
+let N = 22i64
let PolyN = N + 1
type poly = [PolyN]f32
-- First element of pair steps fastest
-let iota2 (n: i32) (m: i32): [](i32, i32) =
+let iota2 (n: i64) (m: i64): [](i64, i64) =
flatten (map (\y -> map (\x -> (x, y)) (iota n)) (iota m))
-let evaln_c (p: poly) (nterms: i32) (pt: complex): complex =
+let evaln_c (p: poly) (nterms: i64) (pt: complex): complex =
foldr (\coef accum -> cplx.mk_re coef cplx.+ pt cplx.* accum)
(cplx.mk_re p[nterms-1]) (take (nterms - 1) p)
let eval_c (p: poly) (pt: complex): complex = evaln_c p (length p) pt
-let evaln_d (p: poly) (nterms: i32) (pt: f32): f32 =
+let evaln_d (p: poly) (nterms: i64) (pt: f32): f32 =
foldr (\coef accum -> coef + pt * accum)
p[nterms-1] (take (nterms - 1) p)
let eval_d (p: poly) (pt: f32): f32 = evaln_d p (length p) pt
let derivative (p: poly): *poly =
- map2 (\i v -> f32.i32 (i32.bool (i != PolyN - 1) * (i + 1)) * v)
+ map2 (\i v -> f32.i64 (i64.bool (i != PolyN - 1) * (i + 1)) * v)
(0..<PolyN) (rotate 1 p)
-- Cauchy's bound: https://en.wikipedia.org/wiki/Geometrical_properties_of_polynomial_roots#Lagrange's_and_Cauchy's_bounds
@@ -57,7 +57,7 @@ module aberth = {
in (rng, approx)
let compute_bound_poly (p: poly): *poly =
- map2 (\coef i -> f32.abs coef * f32.i32 (4 * i + 1)) p (0..<PolyN)
+ map2 (\coef i -> f32.abs coef * f32.i64 (4 * i + 1)) p (0..<PolyN)
let initialise (p: *poly): *context =
let deriv = derivative p
@@ -122,7 +122,7 @@ let next_derbyshire (p: *poly): *(bool, poly) =
let derbyshire_at_index (index: i32): *poly =
let bitfield = (index << 1) + 1
- in tabulate PolyN (\i -> f32.i32 (i32.get_bit i bitfield * 2 - 1))
+ in tabulate PolyN (\i -> f32.i32 (i32.get_bit (i32.i64 i) bitfield * 2 - 1))
let calc_index (value: f32) (left: f32) (right: f32) (steps: i32): i32 =
@@ -158,9 +158,9 @@ entry main_job
in map (point_index width height bottom_left top_right) pts)
(start_index ..< start_index + num_polys))
let filtered = filter (\i -> i != -1) indices
- in reduce_by_index (replicate (width * height) 0)
+ in reduce_by_index (replicate (i64.i32 width * i64.i32 height) 0)
(+) 0
- filtered
+ (map i64.i32 filtered)
(map (const 1) filtered)
entry main_all
@@ -168,6 +168,6 @@ entry main_all
(left: f32) (top: f32) (right: f32) (bottom: f32)
(seed: i32)
: []i32 =
- main_job 0 (1 << N) width height left top right bottom seed
+ main_job 0 (i32.i64 (1 << N)) width height left top right bottom seed
-entry get_N: i32 = N
+entry get_N: i32 = i32.i64 N