Skip to content

Commit 71d63c8

Browse files
committed
add and tested horner evaluate
1 parent e774577 commit 71d63c8

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

ch02/src/polynomial.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,16 @@ namespace clrs
2020

2121
return y;
2222
}
23+
24+
template<typename Sequence>
25+
typename Sequence::value_type horner_evaluate(Sequence const& seq, typename Sequence::value_type x)
26+
{
27+
using Value = typename Sequence::value_type;
28+
29+
auto y = Value(0);
30+
for (auto coefficient = seq.crbegin(); coefficient != seq.crend(); ++coefficient)
31+
y = *coefficient + x*y;
32+
return y;
33+
}
2334
}
2435
}

ch02/test/test_polynomial.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,35 @@ namespace test
4141
Assert::AreEqual(expect, actual);
4242
}
4343

44+
TEST_METHOD(horner_evaluate_case1)
45+
{
46+
auto sample = std::vector < int > { 1 }; //y = 1
47+
auto x = 2;
48+
auto expect = 1;
49+
auto actual = clrs::ch02::horner_evaluate(sample, x);
50+
51+
Assert::AreEqual(actual, expect);
52+
}
53+
54+
TEST_METHOD(horner_evaluate_case2)
55+
{
56+
auto sample = std::vector < int > { 1, 2 }; // y = 1 + 2x
57+
auto x = 2;
58+
auto expect = 5;
59+
auto actual = clrs::ch02::horner_evaluate(sample, x);
60+
61+
Assert::AreEqual(actual, expect);
62+
}
63+
64+
TEST_METHOD(horner_evaluate_case3)
65+
{
66+
auto sample = std::vector < int > { 5, 2, 0, 7}; // y = 5 + 2x + 0x^2 + 7x^3
67+
auto x = 2; // = 5 + 4 + 0 + 56 = 65
68+
auto expect = 65;
69+
auto actual = clrs::ch02::horner_evaluate(sample, x);
70+
71+
Assert::AreEqual(expect, actual);
72+
}
73+
4474
};
4575
}

0 commit comments

Comments
 (0)