Anonymous user
Horner's rule for polynomial evaluation: Difference between revisions
Horner's rule for polynomial evaluation (view source)
Revision as of 14:54, 13 May 2010
, 14 years ago→{{header|OCaml}}: ++ obj-c (overcomplicated?)
(Added PicoLisp) |
(→{{header|OCaml}}: ++ obj-c (overcomplicated?)) |
||
Line 178:
show horner 3 [-19 7 -4 6] ; 128</lang>
=={{header|Objective-C}}==
<lang objc>#import <Foundation/Foundation.h>
typedef double (*mfunc)(double, double, double);
double accumulateFunc(double s, double x, double a)
{
return s * x + a;
}
@interface NSArray (HornerRule)
- (double)horner: (double)x;
- (NSArray *)reversedArray;
- (double)injectDouble: (double)s xValue: (double)x with: (mfunc)op;
@end
@implementation NSArray (HornerRule)
- (NSArray *)reversedArray
{
NSMutableArray *array = [NSMutableArray arrayWithCapacity: [self count]];
NSEnumerator *e = [self reverseObjectEnumerator];
id el;
while( (el = [e nextObject]) != nil) {
[array addObject: el];
}
return array;
}
- (double)injectDouble: (double)s xValue: (double)x with: (mfunc)op
{
double sum = s;
NSEnumerator *e = [self objectEnumerator];
id el;
while( (el = [e nextObject]) != nil) {
sum = op(sum, x, [el doubleValue]);
}
return sum;
}
- (double)horner: (double)x
{
return [[self reversedArray] injectDouble: 0.0 xValue: x with: (mfunc)accumulateFunc ];
}
@end
int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *coeff = [NSArray
arrayWithObjects:
[NSNumber numberWithDouble: -19.0],
[NSNumber numberWithDouble: 7.0],
[NSNumber numberWithDouble: -4.0],
[NSNumber numberWithDouble: 6.0], nil];
printf("%lf\n", [coeff horner: 3.0]);
[pool release];
return 0;
}</lang>
=={{header|OCaml}}==
|