加减乘除幂的乘方ppt开方算什么逻辑

计算机中是怎样进行减法,除法,乘方,开方等运算的?
[问题点数:20分]
计算机中是怎样进行减法,除法,乘方,开方等运算的?
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2006年10月 Web 开发大版内专家分月排行榜第三
2007年7月 C/C++大版内专家分月排行榜第一2007年6月 C/C++大版内专家分月排行榜第一2007年5月 C/C++大版内专家分月排行榜第一2007年4月 C/C++大版内专家分月排行榜第一2007年3月 C/C++大版内专家分月排行榜第一2007年2月 C/C++大版内专家分月排行榜第一2007年1月 C/C++大版内专家分月排行榜第一2006年12月 C/C++大版内专家分月排行榜第一2006年11月 C/C++大版内专家分月排行榜第一2006年9月 C/C++大版内专家分月排行榜第一2006年8月 C/C++大版内专家分月排行榜第一2006年7月 C/C++大版内专家分月排行榜第一2006年6月 C/C++大版内专家分月排行榜第一2006年5月 C/C++大版内专家分月排行榜第一2006年4月 C/C++大版内专家分月排行榜第一2006年3月 C/C++大版内专家分月排行榜第一2005年8月 C/C++大版内专家分月排行榜第一
2007年8月 C/C++大版内专家分月排行榜第二2006年10月 C/C++大版内专家分月排行榜第二
2007年7月 C/C++大版内专家分月排行榜第一2007年6月 C/C++大版内专家分月排行榜第一2007年5月 C/C++大版内专家分月排行榜第一2007年4月 C/C++大版内专家分月排行榜第一2007年3月 C/C++大版内专家分月排行榜第一2007年2月 C/C++大版内专家分月排行榜第一2007年1月 C/C++大版内专家分月排行榜第一2006年12月 C/C++大版内专家分月排行榜第一2006年11月 C/C++大版内专家分月排行榜第一2006年9月 C/C++大版内专家分月排行榜第一2006年8月 C/C++大版内专家分月排行榜第一2006年7月 C/C++大版内专家分月排行榜第一2006年6月 C/C++大版内专家分月排行榜第一2006年5月 C/C++大版内专家分月排行榜第一2006年4月 C/C++大版内专家分月排行榜第一2006年3月 C/C++大版内专家分月排行榜第一2005年8月 C/C++大版内专家分月排行榜第一
2007年8月 C/C++大版内专家分月排行榜第二2006年10月 C/C++大版内专家分月排行榜第二
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2009年9月 其他开发语言大版内专家分月排行榜第三2009年2月 其他开发语言大版内专家分月排行榜第三2008年12月 其他开发语言大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。怎样进行综合的逻辑思维
我在【哥德巴赫猜想的终结】这篇诗歌中提出:用哲学家的逻辑思维和数学家的逻辑思维进行新的逻辑思维。原诗是这样写的。
请用数学家们的逻辑思维,&&
再加上哲学家们的逻辑思维,&&
进行一次非常理性的特殊的逻辑思维。&&
那么这就是孙氏的逻辑思维。 &
的确这几年来,我一直使用这种思维方法,从解读道德经,修改道德经第一段的标点符号,到解读整篇道德经,再到解读古诗经,解读论语首篇,大学首篇,理解古慎言人铭文等等,我都陷在了这种思维模式之中。用这种理性的更加全面的逻辑思维,试图解决人类最棘手,最难解决的对于人类真理的认识问题。
那么,数学家的逻辑思维与哲学家的逻辑思维有什么区别呢?在我看来,加减乘除乘方开方等等涵数值,数学家的逻辑思维就是线条型的,就是表现在一条座标轴上,无论是横座标轴,还是纵座标轴。就是纵横座标轴的联合应用,都是座标轴形的逻辑思维。平面的线和点的联系问题。而哲学家的逻辑思维,我认为是立体型的座标体逻辑思维。无论是球体还是方体,甚至更复在的不规则体,像树等植物,人等动物。这些不规则体也要逻辑出规则来。简单说这应该就是哲学家的逻辑思维。
所谓体系的系统化,绝不是一个单线条一个长串的推理演绎,而是像一棵大树,有错综复杂的很多根系,又有牢固粗壮的树干,配以枝干,分支的枝条,叶子,花和果,共同组成这个立体的理论体系。一部分一部分的要有好多个分系组成。这是一个很大的工程,不是我一个人能够完成的,我只是一个扎起这个框架的人。找到了根本之处,和继续下一步工作的方法,要靠能够认识到道德的人们的共同努力才行。
毛泽东说:雄关漫道真如铁,而今迈步从头越。我们俗话也常说:从头开始。从零开始。走到头就归零。等等,不一而足论。这个头,这个零,这个起跑线的准备跑而未跑的一边,与截止绳。音乐上用的休止符,数学上用的绝对值符号。甚至于我们行走的路上的红绿灯下的斑马线。&&这些都表明了这个无中
毛泽东说:雄关漫道真如铁,而今迈步从头越。我们俗话也常说:从头开始。从零开始。走到头就归零。等等,不一而足论。这个头,这个零,这个起跑线的准备跑而未跑的一边,与截止绳。音乐上用的休止符,数学上用的绝对值符号。甚至于我们行走的路上的红绿灯下的斑马线。&&这些都表明了这个无中生有的之处的重要性。这理就是道之结合之中心,而德之基。一阴一阳之谓道,阴阳两道结合之谓德。阴阳和合之德。这种概念就是经商也用得上。买方为阳,卖方为阴,买卖双方的结合久是契约商量,讨价还价,这个过程就是德性化合的过程。一旦成交,就是德化孕育成功了一桩买卖。所以市场的市字,就是一点一横就是得德道为头,巾就是阴隐性的阴阳三合。逻辑组合了一个市场的【市】字。
毛泽东说:一张白纸,没有负担,好写最新最美的文字,好画最新最美的图画。他就是说了这一个无中生有的过程。也就是任何事物的起始都是无,世上本无事。所谓有事,就是无中生而有事。是在事物的运动中无中生有的。就可以说,那个地方如果没有人放哪里一张白纸,那个地方就更加是无。就连写字画画的意念也没有,也是无。所以说任何事物都是无中生有的。
好了,于是我们在这一张白纸上,无中生有的先点上一点,这样这张纸上就有了一点,这个点就是基点,基础之点,是从基地里边点画出来的。它楚楚动人的跃然这张白纸上了。而如果我们一点一点的连续不断的点画下去,就形成了一联串的点,成了一条线,或者说成了一道杠。我们的思维呢也就跟随着点画线的罗列辑录形成而进入了线条型的逻辑思维。再反过来分解开去,就是分解分析,在理论上说就像在数学上这就是加减乘除等等的逻辑思维。也就是线条型座标轴罗辑思维。就像对于物质研究的分子原子粒子理论的应用,甚至粒子对撞机的研究应用都与这个线形罗辑思维分不开。就是正在寻找物质分解到最后是什么?就是寻找这个【无】到底是什么?这个【无】是上帝粒子吗?让我说这就是座标系罗辑思维。就像人类自生产的谱系一样,父传子,子传孙,上边一代代生生不息的传下来,下边再一代代生生不息的传下去。
而对于面的逻辑思维,就是要从无中生有的线开始,连续不断的形成面,普遍的铺开来思维,形成对于面的逻辑思维程序。
而对于这个无中生有的面,再层层叠叠的逻列辑录起来进行整体性的理论思维活动。这就形成了座标体的逻辑思维,立体的逻辑思维。我在解读道德经的过程中发现,道德经就是按这个顺演过程对人类的自生产和人类的社会物质生产活动进行这种综合思维活动并给予了总结的。就是道德经豫则立的过程。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分214 UID38574阅读权限30积分1273帖子精华可用积分1273 专家积分0 在线时间159 小时注册时间最后登录
家境小康, 积分 1273, 距离下一级还需 727 积分
帖子主题精华可用积分1273 专家积分0 在线时间159 小时注册时间最后登录
论坛徽章:1
花了点时间写了这么个东西,目前只支持正整数的运算。
还有很多重要的功能,如素性的检测等还没有完成。
增加了负数 --
decnum.h
#include &stdio.h&
#include &math.h&
#include &iostream&
class decnum
{
& & friend decnum pow(const decnum& x, int n);
& & friend decnum root(const decnum& x, int n);
& & friend decnum div(const decnum& x, const decnum& y, decnum& r);
& & friend decnum abs(const decnum& x);
& & friend bool operator==(const decnum& x, const decnum&y);
& & friend bool operator!=(const decnum& x, const decnum&y);
& & friend bool operator&(const decnum& x, const decnum&y);
& & friend bool operator&(const decnum& x, const decnum&y);
& & friend bool operator&=(const decnum& x, const decnum&y);
& & friend bool operator&=(const decnum& x, const decnum&y);
& & friend ostream& operator&&(ostream&os, const decnum& x);
public:
& & decnum() : cap(0), num(0), sign(0), val(NULL) { }
& & decnum(const char *v, int n)
& & {
& && &&&int i,
& && &&&val = new char[n];
& && &&&if(v[0] == '-') {
& && && && &sign = 1;
& && && && &v++;
& && && && &n--;
& && &&&}
& && &&&else {
& && && && &sign = 0;
& && && && &if(v[0] == '+')
& && && && && & v++;
& && &&&}
& && &&&for(i = 0; i & n && v[i] == '0'; i++);
& && &&&for(j=0; i&n; i++, j++)
& && && && &if(v[n-1-i] &= '0' && v[n-1-i] &= '9')
& && && && && & val[j] = v[n-1-i] - '0';
& && && && &else
& && && && && &
& && &&&num =
& && &&&cap =
& & }
& & decnum(const decnum& x)
& & {
& && &&&val = new char[x.num];
& && &&&memcpy(val, x.val, x.num);
& && &&&sign = x.
& && &&&num = x.
& && &&&cap = x.
& & }
& & decnum(int x)
& & {
& && &&&if(x==0) {
& && && && &cap = num = 0;
& && && && &val = NULL;
& && && && &
& && &&&}
& && &&&if(x & 0) {
& && && && &sign = 1;
& && && && &x = -x;
& && &&&}
& && &&&else
& && && && &sign = 0;
& && &&&char temp[20];
& && &&&sprintf(temp, &%d&, x);
& && &&&int n = strlen(temp);
& && &&&num = cap =
& && &&&val = new char[n];
& && &&&for(int i=0; i&n; i++)
& && && && &val[i] = temp[n-1-i] - '0';
& & }
& & decnum(long long x)
& & {
& && &&&if(x==0) {
& && && && &cap = num = 0;
& && && && &val = NULL;
& && && && &
& && &&&}
& && &&&if(x & 0) {
& && && && &sign = 1;
& && && && &x = -x;
& && &&&}
& && &&&else
& && && && &sign = 0;
& && &&&char temp[20];
& && &&&sprintf(temp, &%lld&, x);
& && &&&int n = strlen(temp);
& && &&&num = cap =
& && &&&val = new char[n];
& && &&&for(int i=0; i&n; i++)
& && && && &val[i] = temp[n-1-i] - '0';
& & }
& & ~decnum() { delete[] }
& & int size() const { }
& & decnum&
& & operator=(const decnum& x)
& & {
& && &&&if (this != &x) {
& && && && &if(cap & x.num) {
& && && && && & delete[]
& && && && && & val = new char[x.num];
& && && && && & cap = x.
& && && && &}
& && && && &memcpy(val, x.val, x.num);
& && && && &num = x.
& && && && &sign = x.
& && &&&}
& && &&&return *
& & }
& & decnum&
& & operator=(int x)
& & {
& && &&&*this = decnum(x);
& && &&&return *
& & }
& & decnum&
& & operator=(long long x)
& & {
& && &&&*this = decnum(x);
& && &&&return *
& & }
& & decnum& abs()
& & {
& && &&&sign = 0;
& && &&&return *
& & }
& & decnum& operator+=(const decnum& x);
& & decnum& operator-=(const decnum& x);
& & decnum& operator*=(const decnum& x);
& & decnum& operator/=(const decnum& x);
& & decnum& operator%=(const decnum& x);
& & decnum&&operator+(const decnum& x)
& & decnum&&operator-(const decnum& x)
& & decnum&&operator*(const decnum& x)
& & decnum&&operator/(const decnum& x)
& & decnum&&operator%(const decnum& x)
& & bool ispow(int n, decnum& r)
& & bool ispow()
private:
& & int&&
& & int&&
& & int&&
& & char *
private:
& & char root_1(int n);
& & decnum& absadd(const decnum& x);
& & decnum& abssub(const decnum& x);
& & bool absge(const decnum& x);
};复制代码
decnum.cpp
#include &decnum.h&
decnum&
decnum::absadd(const decnum& x)
{
& & int i,
& & char carry = 0,
& & if(x.num == 0) return *
& & if(num & x.num)
& && &&&max = x.num + 1;
& & else
& && &&&max = num + 1;
& & if(max & cap)
& & {
& && &&&cap =
& && &&&char *newval = new char[cap];
& && &&&memcpy(newval, val, num);
& && &&&memset(newval+num, 0, cap - num);
& && &&&delete[]
& && &&&val =
& & }
& & else
& & {
& && &&&memset(val+num, 0, max - num);
& & }
& & num = max-1;
& & for(i=0; i&x. i++) {
& && &&&ch = val[i] + x.val[i] +
& && &&&if(ch & 9) {
& && && && &carry = 1;
& && && && &val[i] = ch - 10;
& && &&&}
& && &&&else {
& && && && &carry = 0;
& && && && &val[i] =
& && &&&}
& & }
& & for(; i&=num && carry == 1; i++) {
& && &&&ch = val[i] + 1;
& && &&&if(ch & 9) {
& && && && &carry = 1;
& && && && &val[i] = ch - 10;
& && &&&}
& && &&&else {
& && && && &carry = 0;
& && && && &val[i] =
& && &&&}
& & }
& & if(i&num) num =
& & return *
}
decnum&
decnum::abssub(const decnum& x)
{
& & if(x.num == 0) return *
& &
& & char carry = 0,
& & for(i=0; i&x. i++) {
& && &&&ch = val[i] - x.val[i] -
& && &&&if(ch & 0) {
& && && && &carry = 1;
& && && && &val[i] = ch + 10;
& && &&&}
& && &&&else {
& && && && &carry = 0;
& && && && &val[i] =
& && &&&}
& & }
& & for(; i&num && carry == 1; i++) {
& && &&&ch = val[i] - 1;
& && &&&if(ch & 0) {
& && && && &carry = 1;
& && && && &val[i] = ch + 10;
& && &&&}
& && &&&else {
& && && && &carry = 0;
& && && && &val[i] =
& && &&&}
& & }
& & for(i= i&0 && val[i-1] == 0; i--);
& & num =
& & return *
}
bool
decnum::absge(const decnum& x)
{
& & if(num & x.num)
& & if(num & x.num)
& & for(int i=num-1; i &= 0; i--)
& && &&&if(val[i] & x.val[i])
& && && && &
& && &&&else if(val[i] & x.val[i])
& && && && &
& &
}
decnum&
decnum::operator+=(const decnum& x)
{
& & if(x.sign == sign)
& && &&&return absadd(x);
& & else if(absge(x))
& && &&&return abssub(x);
& & else {
& && &&&decnum tmp(*this);
& && &&&*this =
& && &&&return abssub(tmp);
& & }
}
decnum&
decnum::operator-=(const decnum& x)
{
& & if(x.sign != sign)
& && &&&return absadd(x);
& & else if(absge(x))
& && &&&return abssub(x);
& & else {
& && &&&decnum tmp(*this);
& && &&&*this =
& && &&&return abssub(tmp);
& & }
}
decnum&
decnum::operator*=(const decnum& x)
{
& & if(num == 0) return *
& & if(x.num == 0) {
& && &&&num = 0;
& && &&&return *
& & }
& & if(sign == x.sign)
& && &&&sign = 0;
& & else
& && &&&sign = 1;
& & int mul, i, n, newcap,
& & char ch,
& & char *newval = new char[num + x.num];
& & newcap = num + x.
& & memset(newval, 0, num + x.num);
& & decnum a,
& & char *
& & for(i=0; i&num && val[i] == 0; i++);
& & int na =
& & a.val = val +
& & a.num = num -
& & for(i=0; i&num && x.val[i] == 0; i++);
& & int nb =
& & b.val = x.val +
& & b.num = x.num -
& & ptr = newval + na +
& & for(n=0; n &= a.num + b.num - 2; n++) {
& && &&&mul = 0;
& && &&&if(n & b.num - 1)
& && && && &i = n - b.num + 1;
& && &&&else
& && && && &i=0;
& && &&&max = n & a.num-1 ? n : a.num-1;
& && &&&for(; i&= i++)
& && && && &mul += a.val[i]*b.val[n-i];
& && &&&carry = 0;
& && &&&for(i=n; mul & 0 || carry & 0; mul /= 10, i++) {
& && && && &ch = ptr[i] + mul % 10 +
& && && && &if(ch & 9) {
& && && && && & carry = 1;
& && && && && & ptr[i] = ch - 10;
& && && && &}
& && && && &else
& && && && &{
& && && && && & carry = 0;
& && && && && & ptr[i] =
& && && && &}
& && &&&}
& & }
& & for(i=a.num + b. i&0 && ptr[i-1] == 0; i--);
& & num = i + na +
& & if(cap &= num) {
& && &&&memcpy(val, newval, num);
& && &&&delete[]
& & }
& & else {
& && &&&cap =
& && &&&delete[]
& && &&&val =
& & }
& & a.val = b.val = NULL;
& & return *
}
decnum&
decnum::operator/=(const decnum& x)
{
& & char ch, carry,
& &
& &
& & if(x.num == 0) return *
& & if(num & x.num) {
& && &&&num = 0;
& && &&&return *
& & }
& & if(sign == x.sign)
& && &&&sign = 0;
& & else
& && &&&sign = 1;
& & char *newval = new char[num - x.num + 1];
& & memset(newval, 0, num - x.num + 1);
& & carry = 0;
& & fac = x.val[x.num-1] + 1;
& & tmp.val = val + num - x.num + 1;
& & tmp.cap = tmp.num = x.num -1;
& & for(i=num-1; i&= x.num-1; i--) {
& && &&&tmp.val--;
& && &&&tmp.num++;
& && &&&ch = (carry * 10 + val[i]) /
& && &&&tmp&&-= x *
& && &&&while(tmp &= x) {
& && && && &tmp -=
& && && && &ch++;
& && &&&}
& && &&&newval[i-x.num+1] =
& && &&&carry = val[i];
& & }
& & tmp.val = NULL;
& & for(i=num-x.num+1; i&0 && newval[i-1] == 0; i--);
& & num =
& & delete[]
& & val =
& & return *
}
decnum&
decnum::operator%=(const decnum& x)
{
& & char ch, carry,
& &
& &
& & if(x.num == 0) return *
& & if(num & x.num) return *
& & carry = 0;
& & fac = x.val[x.num-1] + 1;
& & tmp.val = val + num - x.num + 1;
& & tmp.num = x.num - 1;
& & for(i=num-1; i&= x.num-1; i--) {
& && &&&tmp.val--;
& && &&&tmp.num++;
& && &&&ch = (carry * 10 + val[i]) /
& && &&&tmp&&-= x *
& && &&&while(tmp &= x) {
& && && && &tmp -=
& && && && &ch++;
& && &&&}
& && &&&carry = val[i];
& & }
& & tmp.val = NULL;
& & num = tmp.
& & return *
}
decnum
decnum::operator+(const decnum& x) const
{
& & decnum tmp = *
& & return tmp +=
}
decnum
decnum::operator-(const decnum& x) const
{
& & decnum tmp = *
& & return tmp -=
}
decnum
decnum::operator*(const decnum& x) const
{
& & decnum tmp = *
& & return tmp *=
}
decnum
decnum::operator/(const decnum& x) const
{
& & decnum tmp = *
& & return tmp /=
}
decnum
decnum::operator%(const decnum& x) const
{
& & decnum tmp = *
& & return tmp %=
}
decnum abs(const decnum& x)
{
& & decnum tmp(x);
& & tmp.sign = 0;
& &
}
decnum pow(const decnum& x, int n)
{
& & decnum tmp(1), fac(x);
& & for(; n&0; n&&=1) {
& && &&&if(n&0x01)
& && && && &tmp *=
& && &&&fac *=
& & }
& &
}
char decnum::root_1(int n)
{
& & char r = (int)(pow(1+val[num-1], 1.0/n) * pow(10,(num-1.0)/n));
& & for(; r&0 && pow(decnum(r), n) & * r--);
& &
}
bool decnum::ispow(int n, decnum& r) const
{
& & if(num == 0) {
& && &&&r.num = 0;
& && &&&
& & }
& & if(sign == 1 && (n&1 == 0)) {
& && &&&r.num = 0;
& && &&&
& & }
& & decnum tmp,
& & r.cap = r.num = (num+n-1) /
& & r.val = new char[r.num];
& & r.sign =
& & memset(r.val, 0, r.num);
& & tmp.val = val + (r.num-1)*n;
& & tmp.num = num - (r.num-1)*n;
& & r.val[r.num-1] = tmp.root_1(n);
& & tmp.val = new char[r.num+1];
& & tmp.cap = r.num+1;
& &
& & p = pow(r, n);
& & if(p == *this)
& & for(int i=r.num-2; i&=0; i--) {
& && &&&memset(tmp.val, 0, i+1);
& && &&&tmp.val[i] = 1;
& && &&&tmp.num = i+1;
& && &&&tmp +=
& && &&&p = (*this - p) / (pow(tmp, n) - p);
& && &&&if(p.num & 1)
& && && && &v = 9;
& && &&&else if(p.num & 0)
& && && && &v = p.val[0];
& && &&&else
& && && && &v = 0;
& && &&&for(; v&=0; v--) {
& && && && &r.val[i] =
& && && && &p = pow(r, n);
& && && && &if(p == *this)
& && && && && &
& && && && &if(p & *this)
& && && && && &
& && &&&}
& & }
& &
}
bool decnum::ispow() const
{
& & decnum r, dec2(&2&, 1);
& & if(ispow(2, r))
& & for(int n=3; r & dec2; n+=2) {
& && &&&if(ispow(n, r))
& & }
& &
}
decnum
root(const decnum& x, int n)
{
& &
& & x.ispow(n, r);
& &
}
decnum
div(const decnum& x, const decnum& y, decnum& r)
{
& & char ch, carry,
& & decnum d = x,
& &
& & if(y.num == 0)
& & if(d.num & y.num) {
& && &&&r =
& && &&&d = 0;
& && &&&
& & }
& & char *newval = new char[d.num - y.num + 1];
& & memset(newval, 0, d.num - y.num + 1);
& & carry = 0;
& & fac = y.val[y.num-1] + 1;
& & tmp.val = d.val + d.num - y.num + 1;
& & tmp.num = y.num - 1;
& & for(i=d.num-1; i&= y.num-1; i--) {
& && &&&tmp.val--;
& && &&&tmp.num++;
& && &&&ch = (carry * 10 + d.val[i]) /
& && &&&tmp&&-= y *
& && &&&while(tmp &= y) {
& && && && &tmp -=
& && && && &ch++;
& && &&&}
& && &&&newval[i-y.num+1] =
& && &&&carry = d.val[i];
& & }
& & r =
& & tmp.val = NULL;
& & for(i=d.num-y.num+1; i&0 && newval[i-1] == 0; i--);
& & d.num =
& & delete[] d.
& & d.val =
& &
}
bool operator==(const decnum& x, const decnum&y)
{
& & if(x.sign != y.sign)
& & if(x.num != y.num)
& & for(int i=0; i & x. i++)
& && &&&if(x.val[i] != y.val[i])
& && && && &
& &
}
bool operator!=(const decnum& x, const decnum&y)
{
& & return !(x==y);
}
bool operator&(const decnum& x, const decnum&y)
{
& & if(x.sign & y.sign)
& & if(x.sign & y.sign)
& & bool retval = (x.sign == 0);
& & if(x.num & y.num)
& & if(x.num & y.num) return !
& & for(int i=x.num-1; i &= 0; i--)
& && &&&if(x.val[i] & y.val[i])
& && && && &
& && &&&else if(x.val[i] & y.val[i])
& && && && &return !
& &
}
bool operator&(const decnum& x, const decnum&y)
{
& & return y &
}
bool operator&=(const decnum& x, const decnum&y)
{
& & if(x.sign & y.sign)
& & if(x.sign & y.sign)
& & bool retval = (x.sign == 0);
& & if(x.num & y.num)
& & if(x.num & y.num) return !
& & for(int i=x.num-1; i &= 0; i--)
& && &&&if(x.val[i] & y.val[i])
& && && && &
& && &&&else if(x.val[i] & y.val[i])
& && && && &return !
& &
}
bool operator&=(const decnum& x, const decnum&y)
{
& & return y &=
}
ostream& operator&&(ostream&os, const decnum& x)
{
& & if(x.size() == 0)
& && &&&os && 0;
& & else {
& && &&&if(x.sign == 1)
& && && && &os && &-&;
& && &&&for(int i = x.size()-1; i&=0; i--)
& && && && &os && (int)x.val[i];
& & }
& &
}复制代码
[ 本帖最后由 yuxh 于
18:11 编辑 ]
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分2815 UID45332阅读权限100积分81518帖子精华可用积分81532 专家积分1309 在线时间15106 小时注册时间最后登录
帖子主题精华可用积分81532 专家积分1309 在线时间15106 小时注册时间最后登录
论坛徽章:1
传说中的沙发?
空间积分0 信誉积分109 UID阅读权限20积分338帖子精华可用积分338 专家积分0 在线时间2 小时注册时间最后登录
稍有积蓄, 积分 338, 距离下一级还需 162 积分
帖子主题精华可用积分338 专家积分0 在线时间2 小时注册时间最后登录
论坛徽章:0
8错, 对我搞科学计算有用, 测试过效率么?
空间积分0 信誉积分109 UID阅读权限20积分338帖子精华可用积分338 专家积分0 在线时间2 小时注册时间最后登录
稍有积蓄, 积分 338, 距离下一级还需 162 积分
帖子主题精华可用积分338 专家积分0 在线时间2 小时注册时间最后登录
论坛徽章:0
最好再加上超高精度的浮点数的混合运算支持
空间积分0 信誉积分214 UID38574阅读权限30积分1273帖子精华可用积分1273 专家积分0 在线时间159 小时注册时间最后登录
家境小康, 积分 1273, 距离下一级还需 727 积分
帖子主题精华可用积分1273 专家积分0 在线时间159 小时注册时间最后登录
论坛徽章:1
这个本来是为大素数的测试用的,这些是要用到的基本运算
可惜我的工作与加密算法无关,纯粹是业余爱好,代码也是业余水平的。
就效率而言,比较慢的就是求n次方根这个了:
root(x, n)
设x有m位,则算法应该是O(m^3*log(m)/n)的
检测一个数是否是某个数的整数次幂:
这个就差不多是O(m^3*log(m)^2)的了
[ 本帖最后由 yuxh 于
11:17 编辑 ]
空间积分0 信誉积分100 UID阅读权限20积分501帖子精华可用积分501 专家积分0 在线时间0 小时注册时间最后登录
稍有积蓄, 积分 501, 距离下一级还需 -1 积分
帖子主题精华可用积分501 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
生活日志:
http://monnand.linuxsky.net
技术文章:
http://blog.csdn.net/monnand/
联系方式:
E-mail:.cn
空间积分0 信誉积分0 UID阅读权限30积分1135帖子精华可用积分1133 专家积分0 在线时间165 小时注册时间最后登录
家境小康, 积分 1135, 距离下一级还需 865 积分
帖子主题精华可用积分1133 专家积分0 在线时间165 小时注册时间最后登录
论坛徽章:0
空间积分802 信誉积分1041 UID阅读权限90积分12388帖子精华可用积分12390 专家积分0 在线时间2971 小时注册时间最后登录
大富大贵, 积分 12388, 距离下一级还需 7612 积分
帖子主题精华可用积分12390 专家积分0 在线时间2971 小时注册时间最后登录
论坛徽章:2
接口为10进制, 内部的进制采用unsigned long或unsigned short,是不是更能借助逻辑运算,提高效率?
空间积分0 信誉积分100 UID661604阅读权限10积分31帖子精华可用积分31 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 31, 距离下一级还需 169 积分
帖子主题精华可用积分31 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
回复 1楼 yuxh 的帖子
来凑凑热闹
/***************************************************************************
& && && && && && && && &&&decimal.h&&-&&description
& && && && && && && && && &&&-------------------
& & begin& && && && && & : Wed Jan 9 2002
& & copyright& && && && &: (C) 2002 by Xian Yining
& & email& && && && && & :
***************************************************************************/
/***************************************************************************
*& && && && && && && && && && && && && && && && && && && && && && && && & *
*& &This prog you can redistribute it and/or modify&&*
*& &it under the terms of the GNU General Public License as published by&&*
*& &the Free Software F either version 2 of the License, or& &&&*
*& &(at your option) any later version.& && && && && && && && && && && &&&*
*& && && && && && && && && && && && && && && && && && && && && && && && & *
***************************************************************************/
#ifndef DECIMAL_H
#define DECIMAL_H
#ifndef __USE_GNU
#define __USE_GNU
#ifndef __USE_ISOC99
#define __USE_ISOC99
#include &typeinfo&
#include &iostream&
#include &string&
#include &limits&
const unsigned DECIMAL_DEFAULT_PRE = 20,DECIMAL_DEFAULT_DEC = 6;
class decimal
& & & & enum Sign {PLUS=1,MINUS=-1};
& & & & enum Stat {NOINIT=-1,OK,UPFLOW,DOWNFLOW,OVERDIGITS};
& & & & enum Pre&&{DOUBLE_PRECISION=std::numeric_limits&double&::digits10,LDOUBLE_PRECISION=std::numeric_limits&long double&::digits10};
& & & & //构造函数
& & & & decimal(void):sn(PLUS),val(&0&quot,exp(0),st(OK),pre(DECIMAL_DEFAULT_PRE),dec(DECIMAL_DEFAULT_DEC) {}
& & & & decimal(const std::string &,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const char* cstr,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const int,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const unsigned int,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const long,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const long long,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const unsigned long,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const unsigned long long,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const double,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const long double,const unsigned int p=DECIMAL_DEFAULT_PRE,const unsigned int d=DECIMAL_DEFAULT_DEC) ;
& & & & decimal(const decimal& d):sn(d.sn),val(d.val),exp(d.exp),st(d.st),pre(d.pre),dec(d.dec) {}
& & & & virtual ~decimal(){}
& & & & //赋值
& & & & decimal& operator=(const decimal&amp ;
& & & & //算术运算
& & & & decimal& operator +=(const decimal&amp ;
& & & & decimal& operator -=(const decimal&amp ;
& & & & decimal& operator *=(const decimal&amp ;
& & & & decimal& operator /=(const decimal&amp ;
//& & & & decimal& operator %=(const decimal&amp ;
& & & & //比较运算符
& & & & bool le(const decimal&amp
& & & & bool eq(const decimal&amp
& & & & bool gt(const decimal&amp
& & & & decimal& operator-(void) {sn=((sn==PLUS)?MINUSLUS);return *}
& & & & decimal& operator+(void) {return *}
& & & & //杂项函数
& & & & virtual std::string toString()
& & & & virtual std::string toShortStr()
& & & & virtual std::string toString(const unsigned int len,const int de)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //在len长度内转为十进小数字符串,超常则返回‘*’串
& & & & virtual std::string toEString(const unsigned int len=0)& & & & //在len长度内转为科学表示法字符串,超常则返回‘*’串
& & & & bool ok() const {return (st==OK)?true:}& & & & & & & & //数字是否有效
& & & & bool zero() const {return (val==&0&)?true:}& & & & //数字是否为0
& & & & virtual decimal& round(int r) ;
& & & & virtual decimal& round() ;& & & & //按dec指定的位数四舍五入
& & & & Sign getSn() const {}
& & & & const std::string &getVal() const {}
& & & & int getExp() const {}
& & & & Stat getSt() const {}
& & & & unsigned getPre() const {}
& & & & unsigned getDec() const {}
/****************
*& &内部子程序& &*
****************/
protected :
& & & & decimal& decReg() ;
& & & & decimal& decAdd(const decimal&);
& & & & decimal& decSub(const decimal&);
& & & & decimal& decMulti(const decimal&) ;
& & & & decimal& decDiv(const decimal&);
& & & & void valDiv(std::string& s1,const std::string& s2,const unsigned len) ;
& & & & char valMult(std::string& s1,const std::string& s2) ;
& & & & void valAdd(std::string& s1,int &p1,const std::string& s2,int p2) ;
& & & & int valSub(std::string& s1,int &e1,const std::string& s2,const int e2);
& & & & int digitAdd(char& c1,const char c2,const int car=0) ;
& & & & int digitSub(char& c1,const char c2,const int b=0) ;
& & & & char digitMult(char& c1,const char c2,const char m) ;
& & & & int valCmp(const std::string& s1,const int e1,const std::string& s2,const int e2)
& & & & void setSn(Sign s) {sn=s;}
& & & & void setVal(const std::string &s) {val=s;}
& & & & void setExp(int i) {exp=i;}
& & & & void setSt(Stat s) {st=s;}
& & & & void setPre(unsigned u) {pre=u;}
& & & & void setDec(unsigned u) {dec=u;}
& & & & Sign& & & & & & & && & & & //符号
& & & & std::string& & & && & & & //有效尾数
& & & & int & & & & & & & && & & & //小数点位置(指数)
& & & & //以下为辅助参数
& & & & Stat& & & & & & & && & & & //状态
& & & & unsigned int& & & && & & & //精度(最大有效数字位数)
& & & & unsigned int& & & && & & & //保留小数位数
/*******************
*& &协作函数& && & *
*******************/
decimal round(const decimal& ,const int) ;
//算术运算
decimal operator +(const decimal&,const decimal&) ;
decimal operator -(const decimal&,const decimal&) ;
decimal operator *(const decimal&,const decimal&) ;
decimal operator /(const decimal&,const decimal&) ;
//& & & & friend decimal& operator %(const decimal&,const decimal&) ;
//比较运算符
bool operator&&&(const decimal&,const decimal&) ;
bool operator &=(const decimal&,const decimal&) ;
bool operator ==(const decimal&,const decimal&) ;
bool operator &=(const decimal&,const decimal&) ;
bool operator&&&(const decimal&,const decimal&) ;
bool operator !=(const decimal&,const decimal&) ;
std:stream& operator &&(std:stream&,const decimal&) ;
//unsigned int midDigits(const decimal& ,const decimal& ) ;
#endif //DECIMAL_H
[ 本帖最后由 hqxyn 于
19:54 编辑 ]
空间积分0 信誉积分100 UID661604阅读权限10积分31帖子精华可用积分31 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 31, 距离下一级还需 169 积分
帖子主题精华可用积分31 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
回复 9楼 hqxyn 的帖子
/***************************************************************************
& && && && && && && && &&&decimal.cpp&&-&&description
& && && && && && && && && &&&-------------------
& & begin& && && && && & : Wed Jan 9 2002
& & copyright& && && && &: (C) 2002 by Xian Yining
& & email& && && && && & :
***************************************************************************/
/***************************************************************************
*& && && && && && && && && && && && && && && && && && && && && && && && & *
*& &This prog you can redistribute it and/or modify&&*
*& &it under the terms of the GNU General Public License as published by&&*
*& &the Free Software F either version 2 of the License, or& &&&*
*& &(at your option) any later version.& && && && && && && && && && && &&&*
*& && && && && && && && && && && && && && && && && && && && && && && && & *
***************************************************************************/
#ifndef _MONEY_H
#define _MONEY_H
#include &decimal.h&
const int MONEY_DEFAULT_DEC = 2;
class money : public decimal {
money():decimal(0,DECIMAL_DEFAULT_PRE,MONEY_DEFAULT_DEC) {};
money(const char* cstr,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(cstr,p,MONEY_DEFAULT_DEC) {round();} ;
money(const int i,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(i,p,MONEY_DEFAULT_DEC){round();} ;
money(const unsigned int ui,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(ui,p,MONEY_DEFAULT_DEC){round();} ;
money(const long l,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(l,p,MONEY_DEFAULT_DEC){round();} ;
money(const long long ll,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(ll,p,MONEY_DEFAULT_DEC){round();} ;
money(const unsigned long ul,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(ul,p,MONEY_DEFAULT_DEC){round();} ;
money(const unsigned long long ull,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(ull,p,MONEY_DEFAULT_DEC){round();} ;
money(const double db,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(db,p,MONEY_DEFAULT_DEC){round();} ;
money(const long double ld,const unsigned int p=DECIMAL_DEFAULT_PRE)
& & & & & & & & :decimal(ld,p,MONEY_DEFAULT_DEC){round();} ;
money(const decimal& d)
& & & & & & & & :decimal(0,d.getPre(),MONEY_DEFAULT_DEC) {
& & & & & & & & setSn(d.getSn());
& & & & & & & & setVal(d.getVal());
& & & & & & & & setExp(d.getExp());
& & & & & & & & round();}
//赋值d.toEString().c_str()
money& operator=(const decimal& d) {
& & & & //精度定义(pre)和保留小数位数(dec)在变量定义时确定,?新值时不变。
& & & & setSn(d.getSn());
& & & & setVal(d.getVal());
& & & & setExp(d.getExp());
& & & & if (getVal().size()&getPre()) {setSt(OVERDIGITS);}
& & & & else setSt(d.getSt());
& & & & round();
& & & & return *
#endif //_MONEY_H
[ 本帖最后由 hqxyn 于
10:38 编辑 ]
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 积的乘方 的文章

 

随机推荐