高精度计算(1)--引言

我们知道,目前计算机计算数值的精度较高,但因硬件限制,往往达不到实际生产需要,因此我们可以通过对程序进行缜密设计实现高精度计算。今天我们来谈谈这个问题。

首先,我们应知道,高精度计算的工作原理:

    像竖式一样,我们可以利用竖式的进位、借位,再通过字符串存储数据与字符串函数的操作、计算,实现高精度计算。

   Eg.

     5 2 2                           a3 a2 a1

+  6 2 3                       +   b3 b2 b1

____________________             =====>               _________________________          

 1 1 4 5                        c4 cc2 c1

那么,在高精度计算时,我们应注意什么?

这就说来话长了······

1.数据的接收与存储

  当输入数据很长很长······(如:1000位,10000位,10000000...位时),我们只要开出足够的字符串长度,利用字符串函数的操作、计算,将每一位取出,存入数组中。

 1 void init(int a[]) { /*传入数组*/
 2
 3     string s;
 4
 5     cin>>s;
 6
 7     a[0]=s.length(); /*用a[0]计算字符串s的位数*/
 8
 9     for (i=1;i<=a[0];i++)
10       a[i]=s[a[0]-i]-‘0‘;
11     /*s----->a[],并倒序*/
12
13 }

另一种是直接用循环加数组方法,也是异曲同工之妙。

 

   2.确定高精度数位数

    位数的确定:接收时往往是使用字符串,所以它的位数==字符串长度。

  3.进位、退位

 1 /*加法进位*/
 2 c[i]=a[i]+b[i];
 3 if (c[i]>=10) {
 4
 5     c[i]%=10;
 6     ++c[i+1];
 7
 8 }
 9
10 /*减法进位*/
11 if (a[i]<b[i]) {
12
13     --a[i];
14     a[i]+=10;
15
16 }
17
18 c[i]=a[i]-b[i];
19
20 /*乘法进位*/
21 c[i+j-1]=a[i]*b[j]+x+c[i+i-1];
22 x=c[i+j-1]/10;
23 c[i+j-1]%=10;

以上就是高精度计算的理论知识,以后我将会发放相关事例。

谢谢!

时间: 2024-10-22 14:35:51

高精度计算(1)--引言的相关文章

C++ vs Java 系列 —— 引言

引言 学习Java多年了,现今有捡起了C++的学习之路,虽然说Java依旧是我的挚爱,C++诸多毛病依旧没改,还是那样的难用,那样的不讨人喜欢,那样让人感觉裹足不前,但是我还是会坚持将它学习完,这样不仅能够增强我的生存能力,更为重要的是能够让我看到追溯Java的起源,Java是如何从C++中汲取养分,舍弃其令人恶心的东西,成为一门成熟而优秀的面向对象的语言. C++诞生于1983年,是对于C语言的继承与发展,既可以像C语言一样面向过程化或者面向函数式编程,也可以面对对象编程,是一门类C语言.强类

Android基础入门教程——0.教程引言与目录

Android基础入门教程--0.教程引言与目录 标签(空格分隔): Android基础入门教程 好吧,先自夸一下: 使用Markdown来写blog,使用Android Studio来开发Android程序, 除了基础讲解,还会结合实际开发中用到的,遇到的进行学习,跟着路线图学习 事半功倍,希望给各位Android初学者带来便利~相信你会慢慢喜欢上这个教程的! 另外该教程除了在csdn上发布外,还可以在w3c菜鸟笔记上发布,当然后者是FK排版 过的,看起来比会比csdn上的好看一些,这里同时感

【1】Bootstrap入门引言

Bootstrap学习者要具备的一些要求: [1]xhtml常用标签的基础知识 [2]xhtml+css布局的基础知识 [3]html5+css3的基础知识 ====================================== 必备的软件: [1]手写代码-----Dreamweaver.notepad++.EditPlus [2]浏览器-----火狐.谷歌和ie9+ [3]调试工具-----火狐插件firebug ====================================

引言:Canvas绘图API快速入门

引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏动画效果的原理是怎样的?本篇文章将带您在20分钟内快速了解和上手HTML5游戏开发的神器:Canvas绘制API. 一.Canvas是什么? Canvas就是一个画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js,所以让js编程到了嗑药的地步.另外Canvas不仅仅提供简单的

高精度计算

一.高精度计算中需处理好以下问题 •数据的接收与存储: •计算结果位数的确定: •进位.借位.商和余数的处理 •运算结果的输出 1.数据的接收方法和存贮方法 数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中. Type numtype=array[1..500]of word:{整数数组类型} Var a,b:numtype: {a和b为整数数组} la,lb:integer: {整数数组a的长度和b的长度}

高精度计算(2015.8.1)

c++中,变量的大小是有限制的. 比如int是 -2147483648~2147483647 long long是-9223372036854775808~18446744073709551615 然而他们都有一个范围,如果数据过大,就会出现错误.这时,我们需要高精度计算. 同过数组来存储各位上的情况,模拟计算加减乘除. 首先,我们定义一个叫做bigNumber的类 class bigNumber{ }; 然后,在里面声明一个整数数组(1000位) int num[1001]; 其中,num[0

[转载]项目风险管理七种武器之引言

清晨,朝阳,还有Apec蓝: 地铁,人流,还有引导员. 度教授大步流星的走进百度大厦,迎面的保安哥哥一脸正气英姿勃发,前台妹妹端庄大气笑颜如花. 刚刚走上二楼,度教授就隐约听到一阵阵鼾声传来,循声走过去,他轻轻的推开休息室的门,果真是度小帅正在用高难度的前空翻360度四仰八叉的躺在那儿,鞋子都没有脱,鼾声时隐时现. 度教授正想掩门而去,就听度小帅呓语了一声. “妖怪,哪里走!”扑通一声,小帅掉到地上又顺势坐了起来. “小帅,你梦到妖怪了?”度教授打趣道. 小帅揉着发红的胳膊,不好意思的说道:“是

核心动画-引言

1.引言 诗经中有比兴的说法,简而言之就是,先言他物,引起所咏之词.引言亦有次妙语 ? UIView中有一个属性Layer, 在设置圆角View是很是有用View.layer.cornerRadius? 若是button或者image view? 还要设置View.layer.clipsToBounds=yes ? 那么这个layer就是图层可以这样理解,View是一个控件,可以把它分为两部分,一个是layer属性 它的作用就是绘制一个可以看见的层,View还有其他的属性,管理View的其他特性

ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言 1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉Windows的基本操作 · 接触过地理信息系统的概念 · 理解地理数据的特点 1.2 预期效果 我们期望用户在阅读完本指南后对以下知识有一定的了解: · 了解ArcGIS for Desktop的组成与功能 · 熟悉使用ArcGIS for Desktop进行数据编辑.整饰和输出的流程 · 如何使用