基于过程的sin函数的计算

基于泰勒展开式,我们可以方便的计算正弦函数的值,那么如果要求不能使用函数呢,可能会带来点小麻烦,下面是纯过程的正弦函数的计算,精度可控

<span style="font-size:24px;">#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    double x;
    double sin_res=0;//正弦结果
    double sin_res_before=0;
    int sin_presicion=1e-4;//sin循环次数
    int PI_precision=1000000;//PI循环次数
    int flag;//正负号
    int deep;//当前阶数
    double mol;//分子
    double den;//分母
    double PI=0;
    //计算PI
    {
        flag=1;
        mol=4.0;
        den=1.0;
        for(int i=0; i<PI_precision; i++)
        {
            //printf("num=%lg\n",(flag)*(mol/den));
            PI+=(flag)*(mol/den);
            flag=-flag;
            den+=2.0;
        }
    }
    x=PI*0.25;
    //第一问
    {
        printf("k   ");
        for(double i=0; i<=1.0; i+=0.1)
        {
            printf("%-7lg",i);

        }
        printf("\n");
        printf("sin ");
        for(double i=0; i<=1.0; i+=0.1)
        {
            x=i*PI/2.0;
            sin_res=0;
            sin_res_before=-1;
            flag=1;//初始化
            deep=1;
            mol=x;
            den=1.0;
            while((sin_res-sin_res_before)>sin_presicion)
            {
                //printf("mol=%lg,den=%lg\n",mol,den);
                sin_res_before=sin_res;
                sin_res+=flag*(mol/den);
                deep+=2;
                mol*=x*x;
                den*=deep*(deep-1);
                flag=-flag;
            }
            printf("%.4lf ",sin_res);
        }
        printf("\n");
    }

    //第二问
    {

    }
    /*
    //计算级数展开式
    {
        flag=1;//初始化
        deep=1;
        mol=x;
        den=1.0;
        for(int p=0; p<sin_presicion; p++)
        {
            //printf("mol=%lg,den=%lg\n",mol,den);
            sin_res+=flag*(mol/den);
            deep+=2;
            mol*=x*x;
            den*=deep*(deep-1);
            flag=-flag;
        }
    }
    printf("sin(%lg)=%lg\n",x,sin_res);
    */
    return 0;
}
</span>


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive 是一种基于 Hadoop 的数据仓库工具,用于对存储在 Hadoop 文件系统中的大型数据集进行查询和分析。在 Hive 中,SIN 函数是一个数学函数,它用于计算给定角度值的正弦值。 ### 使用方法: 当你在 Hive 查询语句中需要计算某个角度的正弦值时,可以使用 SIN 函数。需要注意的是,在调用 SIN 函数时,输入的角度应该是弧度制(单位为 Radians),而不是通常人们所说的度数。 ### 示例 SQL 语法: 假设有一个名为 `data` 的表,其中包含一列名为 `angle_in_degrees`,表示角度的数据。下面是如何使用 SIN 函数计算这些角度对应的正弦值: ```sql SELECT angle_in_degrees, SIN(angle_in_degrees * PI() / 180) as sine_value FROM data; ``` 在这个例子中,我们首先将角度从度转换为弧度,然后再计算正弦值。 ### 参数说明: - **angle_in_degrees**: 这是从表中选择的一个字段,包含了原始的角度值(以度为单位)。 - **PI()** 和 **/ 180**: 这些操作帮助我们将度转换成弧度。π(Pi)是一个常量,代表圆周率大约等于3.14159。通过乘以 π 并除以 180,我们可以完成度到弧度的转换。 ### 输出结果解释: 上述查询将会返回一个新的列 `sine_value`,该列包含了原来 `angle_in_degrees` 列中每个角度对应正弦值的结果。 ### 注意事项: 1. **单位转换**:始终记住将角度从度转换为弧度,这是计算正弦值的前提条件。 2. **精度问题**:Hive 使用的是特定的浮点数值类型,处理大范围或极端精确的数值时可能会遇到精度损失的问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值