Skip to content

Commit e4d03f5

Browse files
authored
Optimize polynomial interpolation with Horner form
1 parent 2c2e7ba commit e4d03f5

1 file changed

Lines changed: 3 additions & 15 deletions

File tree

src/asynchro_fast.rs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,7 @@ where
7777
+ t!(336.0) * g
7878
- t!(36.0) * h;
7979
let k0 = t!(5040.0) * d;
80-
let x2 = x * x;
81-
let x3 = x2 * x;
82-
let x4 = x2 * x2;
83-
let x5 = x2 * x3;
84-
let x6 = x3 * x3;
85-
let x7 = x3 * x4;
86-
let val = k7 * x7 + k6 * x6 + k5 * x5 + k4 * x4 + k3 * x3 + k2 * x2 + k1 * x + k0;
80+
let val = k0 + x * (k1 + x * (k2 + x * (k3 + x * (k4 + x * (k5 + x * (k6 + x * k7))))));
8781
t!(1.0 / 5040.0) * val
8882
}
8983

@@ -105,11 +99,7 @@ where
10599
let k2 = -t!(5.0) * a + t!(80.0) * b - t!(150.0) * c + t!(80.0) * d - t!(5.0) * e;
106100
let k1 = t!(6.0) * a - t!(60.0) * b - t!(40.0) * c + t!(120.0) * d - t!(30.0) * e + t!(4.0) * f;
107101
let k0 = t!(120.0) * c;
108-
let x2 = x * x;
109-
let x3 = x2 * x;
110-
let x4 = x2 * x2;
111-
let x5 = x2 * x3;
112-
let val = k5 * x5 + k4 * x4 + k3 * x3 + k2 * x2 + k1 * x + k0;
102+
let val = k0 + x * (k1 + x * (k2 + x * (k3 + x * (k4 + x * k5))));
113103
t!(1.0 / 120.0) * val
114104
}
115105

@@ -123,9 +113,7 @@ where
123113
let a1 = -t!(1.0 / 3.0) * yvals[0] - t!(0.5) * yvals[1] + yvals[2] - t!(1.0 / 6.0) * yvals[3];
124114
let a2 = t!(0.5) * (yvals[0] + yvals[2]) - yvals[1];
125115
let a3 = t!(0.5) * (yvals[1] - yvals[2]) + t!(1.0 / 6.0) * (yvals[3] - yvals[0]);
126-
let x2 = x * x;
127-
let x3 = x2 * x;
128-
a0 + a1 * x + a2 * x2 + a3 * x3
116+
a0 + x * (a1 + x * (a2 + x * a3))
129117
}
130118

131119
/// Linear interpolation between two points at x=0 and x=1.

0 commit comments

Comments
 (0)