mathematica中怎样写类似欧几里得算法
本帖最后由 wsc810 于 2016-11-19 10:04 编辑这是手写步骤
p=86021;q=27720
a0=Round=3.10321=3
86021 - 3*27720=2861
a1=Round=9.68892=10
27720-10*2861=- 890
a2=Round= -3.21461=-3
2861-(-3)(-890)=191
a3=Round[-890/191]= -4.65969=-5
-890-(-5)(191)=65
a4=Round=2.93846=3
191-65*3=-4
a5=Round=-16.25=-16
65-(-16)*(-4)=1
a6=Round[-4,1]=-4
-4-(-4)*1=0
结果求出表a
a={3, 10, -3, -5, 3, -16, -4}
反推FromContinuedFraction[ {3, 10, -3, -5, 3, -16, -4}]=86021/27720
可见结果的正确性
还有一个不明白的问题
Round[{0.5, 1.5, 2.5, 3.5, 4.5}]={0, 2, 2, 4, 4}
Round[{-0.5, -1.5, -2.5, -3.5, -4.5}]={0, -2, -2, -4, -4}
为何 mathematica中,当取中点数的时候,Round函数返回最接近的偶数
这是人为规定还是有其他规则 “四舍六入五成双”,这里“四”是指≤4 时舍去,"六"是指≥6时进位,"五"指的是根据数字5后面的数字来定,当5后还有数时,舍5入1;当5后无有效数字时,分两种情况对待:
a) 5前为奇数,舍5入1;
b) 5前为偶数,舍5不进(0是最小的偶数).
例如(保留整数):9.4~9,9.6~10,3.50=4,4.51~5,2.50~2
四舍五入本身是一种非常粗糙的舍入规则,因为只有在1~9时才会产生舍入——奇数个尾数,自然,“5”的舍入只能按照1/2的概率来论,这样才能保证公正性。如果按照四舍五入规则,在大量数据情况下结果偏向大数,从而误差积累导致产生系统误差。“四舍六入五成双”便是符合上述1/2概率条件,使结果受到舍入误差的影响降到最低,这是一种最精确的科学计数法规则。 division:=
Module[{list={m0,n0}},
While]-Round],Last@list]]];
list
]
绝对值最小剩余可以写成a-Round hujunhua 发表于 2016-11-21 16:03
绝对值最小剩余可以写成a-Round
利用该函数也可以求最大公约数,并且有更高的迭代效率
页:
[1]