哪里出了问题啊?哪里出了问题啊?
我都怀疑是不是浮点数运算有缺陷了
datecell.h (节选)
class SineTaylor
{
public:
double sin(double x)
{
return x - (pow(x, 3)/factorial(3)) + (pow(x, 5)/factorial(5)) - (pow(x, 7)/factorial(7)) + (pow(x, 9)/factorial(9));
}
private:
int factorial(int x)
{
if(x == 1) {
return 1;
} else {
return factorial(x-1)*x;
}
}
double pow(double x, int c)
{
double n = 1.0;
for(int i = 0; i < c; i++) {
n = n*x;
}
return n;
}
};
test.cpp (节选)
TEST(SineTaylor, ZeroValue)
{
SineTaylor sineTaylor;
ASSERT_DOUBLE_EQ(sineTaylor.sin(0), 0);
}
TEST(SineTaylor, HalfPi)
{
SineTaylor sineTaylor;
ASSERT_DOUBLE_EQ(sineTaylor.sin(M_PI/2), 1);
}
TEST(SineTaylor, Pi)
{
SineTaylor sineTaylor;
ASSERT_DOUBLE_EQ(sineTaylor.sin(M_PI), 0);
}
TEST(SineTaylor, TwoThirdsPi)
{
SineTaylor sineTaylor;
ASSERT_DOUBLE_EQ(sineTaylor.sin(M_PI/2*3), -1);
}
TEST(SineTaylor, DoublePi)
{
SineTaylor sineTaylor;
ASSERT_DOUBLE_EQ(sineTaylor.sin(M_PI*2), -1);
}