Horner's rule for polynomial evaluation: Difference between revisions

Content deleted Content added
Updated third D entry
→‎{{header|Rust}}: Update to Rust 0.9-pre syntax
Line 1,144:
 
 
<lang Rust>use// core::io;rust 0.9-pre
 
fn horner(v: ~[f64], x: f64) -> f64 {
let mut accum = 0.0;
let vlen = v.len();
for uint::idx in range(0, vlen) |idx| {
accum = accum*x + v[vlen - idx - 1];
};
accum
Line 1,156:
 
fn main() {
let mut v : ~[f64] = ~[-19., 7., -4., 6.];
io::println(fmt!("result: %?{}", horner(v, 3.0)));
}</lang>
}
</lang>
 
Works with any number type. It uses a reversed left fold to accumulate the result, similar to the Haskell solution.
<lang Rust>// rust 0.9-pre
// Rust 0.8
 
fn horner<T:Num>(cs:&[T], x:T) -> T {
cs.rev_iter().fold(std::num::zero::<T>(), |acc, c| (acc*x) + (*c))
}
 
fn main() { println!("{}", horner([-19,7,-4,6],3) ) }
println!("{}", horner([-19, 7, -4, 6], 3));
}</lang>
 
=={{header|Run BASIC}}==