wsc810 发表于 2016-11-19 09:11:11

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函数返回最接近的偶数
这是人为规定还是有其他规则

kastin 发表于 2016-11-19 13:26:55

“四舍六入五成双”,这里“四”是指≤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概率条件,使结果受到舍入误差的影响降到最低,这是一种最精确的科学计数法规则。

hujunhua 发表于 2016-11-21 16:03:20

division:=
Module[{list={m0,n0}},
While]-Round],Last@list]]];
list
]
绝对值最小剩余可以写成a-Round

wsc810 发表于 2016-12-9 19:12:15

hujunhua 发表于 2016-11-21 16:03
绝对值最小剩余可以写成a-Round

利用该函数也可以求最大公约数,并且有更高的迭代效率
页: [1]
查看完整版本: mathematica中怎样写类似欧几里得算法