Python分数类型没有正确简化

时间:2017-03-09 03:48:36

标签: python debugging types fractions

根据我的理解,Python Fraction类型输出您放入其中的任何内容的简化版本(即print(Fraction(4/8))打印出1/2)。但是,对于某些输入,我得到了非常奇怪的结果:

分数(984/1920)应该输出41/80,而是给出 4503599627370496分之2308094809027379。

分数(1000/992)应该输出125/124,而是给出4539918979204129/4503599627370496。

分数(408/896)应该输出51/112,而是给出8202985035567689/18014398509481984。

当我将正确简化的分数输入到分数类型时,我得到相同的错误表示 - 相同的大量值,甚至。还有更多的例子来自这些。关于为什么会出现这种情况的任何想法,以及我可以做些什么来补救它?

1 个答案:

答案 0 :(得分:3)

使用逗号分隔分子和分母:

let newData = _data.map((x)=>{
  let arr = [];
  for(let i in x){
    arr.push(x[i]);
  }
  return arr;
});

使用>>> Fraction(984/1920) Fraction(2308094809027379, 4503599627370496) >>> Fraction(984, 1920) Fraction(41, 80) 意味着首先进行二进制浮点除法,之前将输入传递给 Fraction 。因此,显示的分数是针对二进制浮点数,在它被舍入到分子中具有53位精度的分数和分母的幂为2之后:

/

通过将参数分离为 Fraction ,您将传递分子和分母的精确整数,然后可以使用最大公分母算法将其简化为最低项。