2013-07-23 175 views
0
#include <iostream> 
#include <math.h> 
#include <cstdlib> 
using namespace std; 

double cosin_value(double value); 
double sin_value(double value); 
double big_degree(double value); 
double big_radian(double value); 
double x; 
double value; 
double degree; 
double radian; 
const double PI = 3.14159; 

char choice; 
char yes; 

int main() 
{ 
    cout << "Please enter an angle value => "; 
    cin >> value; 

    cout << "Is the angle in Degree or Radian?" << endl; 
    cout << "\t" << "Type D if it is in Degree" << endl; 
    cout << "\t" << "Type R if it is in Radian" << endl; 
    cout << "Your response => "; 
    cin >> choice; //degree or radian? 

    cout.setf(ios::fixed); 
    cout.setf(ios::showpoint); 
    cout.precision(10); 

    if (choice == 'D' || choice == 'd') 
    { 
     big_degree (value); 
     cout << " " << "sin(x) = " << "\t" << sin_value(degree) << endl; 
     cout << " " << "cos(x) = " << "\t" << cosin_value(degree) << endl; 
     cout << " " << "tan(x) = " << "\t" << sin_value(degree)/cosin_value(degree) << endl; 
    } 
    else if (choice == 'R' || choice == 'r') 
    { 
     big_radian (value); 
     cout << " " << "sin(x) = " << "\t" << sin_value(radian) << endl; 
     cout << " " << "cos(x) = " << "\t" << cosin_value(radian) << endl; 
     cout << " " << "tan(x) = " << "\t" << sin_value(radian)/cosin_value(radian) << endl; 
    } 
    return 0; 
} 

// Sine,cosine functions 
// angle -360<value<360 

double sin_value(double value) 
{ 
    int count=1; 

    double sine, num, dem, sign, term; 
    sine = 0; 
    sign = 1; 
    num = value; 
    dem = count; 

    while (count <= 20) 
    { 
     term = (num/dem); 
     sine = sine + term * sign; 
     num = num * value * value; 
     count = count + 2; 
     dem = dem * count * (count - 1); 
     sign = -sign; 
    } 
    return (sine); 
} 

double cosin_value(double value) 
{ 
    int count = 0; 
    double cosine, num, dem, sign, term; 
    cosine = 0; 
    sign = 1; 
    num = 1; 
    dem = 1; 

    while (count <= 20) 
    { 
     term = (num/dem); 
     cosine = cosine + term * sign; 
     num = num * value * value; 
     count = count + 2; 
     dem = dem * count * (count - 1); 
     sign = -sign; 
    } 
    return (cosine); 
} 

double big_degree(double value) 
{ 
    int result; 
    const int angle = 360; 
    if (value >= 360 || value <= -360) 
    { 
     result = value/angle; 
     degree = (value - (result * angle)) * PI/180; 
    } 
    else 
    { 
     degree = (value * PI)/180; 
    } 
    return (degree); 
} 

double big_radian(double value) 
{ 
    int result; 

    if (value >= 2 * PI || value <= -2 * PI) 
    { 
     result = value/(2 * PI); 
     radian = (value - (result* 2 * PI)); 
    } 
    else 
    { 
     radian = value; 
    } 
    return (radian); 
} 

我这里有几个问题:计算TAN(X)是无穷的C++

  1. 哪有程序显示棕褐色(x)的无穷当我输入一个值90度或1.5708弧度?当我输入90度时,它给了我一个0.0000013268的输出,而不是0(对于cos(x))。

  2. 我试图把这个命令在我cosin函数,其中如果COS(x)的< 0.00001,将其设置为零,它为90度,但对于其他值一样2.3145弧度,COS(X)值为0而不是-0.677013

我感谢您的指导!

+0

你在哪里设置“度”? 'radian'? –

+0

为什么不保存'big_degree'和'big_radian'的返回值? – Dan455

+0

@ Dan455对不起,我不明白你的意思... – user2611244

回答

4
  1. 使用epsilon值就像您在问题#2中提到的一样。

  2. 在if语句中使用cos(x)的绝对值,如abs(cos(x))。 。

你也可以用double或float来表示无穷大。检查这个链接。 http://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

更重要的是,你可能需要阅读这篇文章名为“什么每台计算机科学家应该知道关于浮点运算” http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

你会发现,你的浮点运算的每一个步骤将累积误差在计算中。

+0

你的意思是'如果(abs(cosine)<0.00001)'在我的cosin_value函数中实现? – user2611244

+0

@ user2611244是的。 – young