高精度算法总结及应用实例

 

 

#include <stdio.h>

#include <string.h>

#include <math.h>

#include <malloc.h>

int an,bn,fa=1,fb=1;         /* 把an,bn,k设为全局变量,an纪录第一个高精度数组的位数,bn纪录第二个高精度数组的位数,k纪录输出结果的位数*/

char b1[250], b2[250];           /*纪录需要计算的两个高精度数据  */

void input(int a1[],int a2[])    /*函数input为输入函数,用来纪录两个待计算的高精度数据,以数组首地址为参数.以实现返回两个高精度数据*/

{

    int i,ai=1,bi=1;

    scanf ( "%s%s", b1, b2 );                      /*输入两个高精度数据 */

    an = strlen( b1 );                             /*an纪录b1的位数 */

    bn = strlen( b2 );                            /*bn纪录b2的位数 */

    if(b1[0]==45) { an--; fa=-1;ai=0;}           /*判断数组的符号 */

    if(b2[0]==45) { bn--; fb=-1;bi=0;}

    for (i=0; i<an; i++,ai++) {a1[i]=b1[an-ai]-'0'; printf("%d",a1[i]);}     /*把字符形数据b1转为整数形数据,同样用数组纪录 */

    for (i=0; i<bn; i++,bi++) a2[i]=b2[bn-bi]-'0';    /* 同上  */

    return;

}

void addition(int a[],int b[],int q)              /*高精度加法运算*/

{

    int i,c[251]={0},k;

    if(fa*fb>0||q)

    {

        if(an>bn) k=an;

        else k=bn;                                            /*用k纪录结果的最小位数*/

        for(i=0;i<k;i++)

        {

            c[i]=a[i]+b[i]+c[i];

            c[i+1]=(int)c[i]/10;

            c[i]=(int)c[i]%10;

         }                                                 /*高精度加法运算过程*/

        if(c[k]) k++;                                     /*判断最后结果的位数*/

        if(fa<0&&q||fa<0) printf("-");

        for(i=k-1;i>=0;i--)  printf("%d",c[i]);         /*输出结果*/

        return;

    }

    else subtraction(a,b,1);

    return;

}

 

subtraction(int a[],int b[],int q)                      /*高精度减法运算*/

{

    int i,f=0,c[251]={0},k;

    if(fa*fb>0||q)

    {

        if(an>bn) k=an;

        else                                     /*用k纪录结果的最大位数*/

         { k=bn;

            for(i=k;a[i]<=b[i]&&i>=0;i--)

            if(a[i]<b[i]) f=1;                /*f纪录结果符号*/

           }

 

        if(!f)                                /*高精度减法运算过程*/

         for(i=0;i<k;i++)

         {

             if(a[i]<b[i])

             {     a[i+1]--;

                   a[i]+=10;

            }

            c[i]=a[i]-b[i];

          }

        else                                         /*当a<b时的处理*/

          for(i=0;i<k;i++)

            {

               if(b[i]<a[i])

               {   b[i+1]--;

                  b[i]+=10;

               }

               c[i]=b[i]-a[i];

             }

        while(!c[k-1]&&k>1) k--;                  /*判断最后结果的位数*/

        if(q&&(fa>0&&f||fa<0&&!f)||fa>0&&(fb>0&&!f||f&&!q)) printf("-");                      /*如果f为真是输出负号*/

        for(i=k-1;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VIR(Visual-Inertial odometry and mapping)定位算法是一种结合视觉和惯性传感器,用于实现移动设备在室内或室外环境中准确定位的算法。该算法主要通过使用相机和陀螺仪等传感器数据,结合计算机视觉技术来实现定位和建图功能。 一种实际应用案例是在机器人导航中的定位和建图。运用VIR定位算法,机器人可以利用相机和惯性传感器的数据,同时对周围环境进行视觉感知和运动测量。通过不断实时更新机器人的位置和姿态信息,可以生成一个准确的室内或室外环境地图。这样,机器人在导航过程中就能根据地图信息和自身位置实时判断当前位置并规划最优路径。 另一个实际应用案例是增强现实(AR)和虚拟现实(VR)应用中的位置追踪。VIR定位算法可以通过相机和陀螺仪等传感器获取用户的位置和姿态信息,并结合计算机视觉技术将虚拟内容精确地投射到用户所在的实际环境中。这样可以实现与真实环境的交互,并为用户提供更沉浸的虚拟体验。 此外,VIR定位算法还可以应用于车辆自主驾驶领域。利用车载的相机和惯性传感器,结合外部地图数据,可以获取车辆的精确位置和姿态信息。同时,通过实时更新的地图信息,车辆能够实时感知和识别道路、障碍物等信息,从而实现自主驾驶和路径规划。 总的来说,VIR定位算法的实际应用案例包括机器人导航、增强现实和虚拟现实应用以及车辆自主驾驶等领域。通过结合视觉和惯性传感器,该算法能够实现精度的定位和建图功能,为多个领域的应用提供了准确、可靠的定位技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值