当 x 为 90 度或 pi/2 弧度时,将 cos(x) 计算为 0,以C++为单位

Compute cos(x) to 0 when x is 90 degree or pi/2 radian in C++

本文关键字:cos 计算 为单位 C++ pi 度或      更新时间:2023-10-16
# 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')
    {   
        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);
}   

嗨,这基本上是我编写的整个程序,用于使用我在初学者C++时所知道的范围知识来计算三角函数值。为了获得更好的视图,您可以参考有关我上面的代码的此链接:codepad.org从第 114 行开始的行是我创建的函数。那里有一个问题,当值为 0 度或 pi/2 弧度时,我如何计算我的 cosx 为 90?由于该程序仍然会为我计算 TANX,即使值是 90 度。假设通过给程序值 90 度,它将给我值 0.0000013268 而不是 0.000000抱歉,由于我只是一个初学者,因此代码对你们来说看起来很奇怪。我感谢您的导游!双big_degree(双值(表示当值为>= 360 或 <= -360*

我没有在

大脑中为 pi 的数字分配任何堆空间,但我确实记得那个atan (1) == pi / 4

像这样更改PI常量:

const double PI = atan(1) * 4;

拿你的代码,做出改变,我得到

Please enter an angle value => 90
Is the angle in Degree or Radian?
    Type D if it is in Degree
    Type R if it is in Radian
Your response => d
 sin(x)   =     1.0000000000
 cos(x)   =     0.0000000000
 tan(x)   =     15555226593901466.0000000000
const double PI = 3.14159;

你做这个定义越精确,cos PI/2的值就越接近0

如果以弧度为单位获取输入本身,则也适用相同的条件。

问题不在于你的代码。您给出的输入不够准确。计算 pi/2 的正确值,您将获得足够准确的值。

另外,如果要舍入可以使用

的值 #rounded 请关闭值=Math.Round(#old 值,4(

我的灵魂:

double mySin(double x)
{
    if (fmod(x, std::numbers::pi) == 0)
        return 0;
    return sin(fmod(x, std::numbers::pi * 2.0));
}
double myCos(double x) { return mySin(x + std::numbers::pi / 2); }
myCos(std::numbers::pi / 2) == 0 //True
myCos(std::numbers::pi) == -1 //True
myCos(std::numbers::pi * 2) == 1 //True