1.322580645161290.321的循环化成分数数是多少

混循环小数0.321的循环化成分数数的方法是:用第二个循环节以前的小数部分所组成的数减去不循环部分所得的差,以这个差作为分数的分子;分母的前几位数字是9末几位数字为0;9的个数与一个循环节的位数相同,0的个数与不循环部分的位数相同

箭头所指是说明:循环节有一位写一个9,不循环部分有一位写一个0

箭头所指说明:循环节有两位写两个9,不循环部分有一位写一个0

箭头所指说明:循环节有两位写两个9,不循环部分有两位写兩个0

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

最近需要用到小数转分数算法便研究了一下。

先看一下最终程序的效果:

说一下数学中有理小数转分数的过程:
有理小数分為有限小数和无限循环小数

有限小数直接去小数点再约分即可

先判断循环节长度n,原小数a乘以10n后再减去a可化为有限小数

循环节为123,一共三位乘以103

刚开始想使用上述方法,于是做了一些实验
计算器算了分数,123/321=0.可见,123、321这两个数并不是很大但昰相除后得到的小数循环节过长,一个double类型尾数长度是52bit对应十进制只有15~16位的精度,不能保证用算法分析出循环节的长度上述方法不适鼡。下面使用连分数做转换


有理数(整数、有限小数、无限循环小数)的连分式是有限的。

二、有理数与连分数的转换:

1. 分数或小数转换为连分数

步骤1:令a=这个数即a←这个数;
步骤2:将a嘚整数部分?a?记录下来;
步骤3:令a为a的小数部分,即a←a-?a?;
步骤4:如果a≠0跳转到步骤2,否则向下执行步骤5;
例如将3211232....转换为连分数步骤如下表:

2. 连分数转换为分数或小数

3. 利用上述方法,將有理数转为连分数再通分可将2....转为分数10741

三、转换算法的C++程序

四、计算机转换时的问题

上述轉换算法我们需要做步骤3中的判断(a≠0)才能知道什么时候跳出循环,由于浮点型的误差程序中a与0作比较应该这样写:abs(a - 0) < 1e-12,其中1e-12为很小嘚数也就是说浮点型a与b比较相等,由于误差需要写成a与b的差的绝对值是否充分小。
程序中的unsigned tr = (unsigned)a; a -= tr;功能是取a中的小数部分初始浮点型为15位嘚有效数字,但减去整数部分后会引起浮点型的误差增大
例如123.00123(8个有效数字)取小数后为0.00123(3个有效数字),有效数字的个数减少了5
也僦是说有效数字减少的个数为 整数的总位数3(123为3位)+小数点后零的个数2(0.00123有2个0)=5。
由于循环的次数误差将越来越大,所以代码中应该计算实时的誤差为多少才能使a≠0的判断更有效。


 
 
 
 
 
上面代码已经实时的计算出浮点数的误差esp理论上在最后一句
a = 1 / a;前面加上if (a < esp) return;即可。但是我们计算浮点数嘚误差过于严谨可能导致还没有到0就提前退出循环了。所有这里我们把a < esp时候的插入nums的索引indexZheng记录下来向后再多计算几次一直到2*indexZheng后再退出循环。
转换为分数时可以分别将nums个数取indexZheng到2*indexZheng对应的double值与给定的double值比较,取误差最小对应的分数

 





我要回帖

更多关于 0.321的循环化成分数 的文章

 

随机推荐