Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python分数类型未正确简化_Python_Debugging_Types_Fractions - Fatal编程技术网

Python分数类型未正确简化

Python分数类型未正确简化,python,debugging,types,fractions,Python,Debugging,Types,Fractions,据我所知,Python分数类型输出您放入其中的任何内容的简化版本(即print(分数(4/8))输出1/2)。但是,对于某些输入,我得到的结果非常奇怪: 分数(984/1920)应输出41/80,但给出 2308094809027379/4503599627370496 分数(1000/992)应输出125/124,但给出4539918979204129/4503599627370496 分数(408/896)应输出51/112,但给出的是820298503567689/180143985094

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

分数(984/1920)应输出41/80,但给出 2308094809027379/4503599627370496

分数(1000/992)应输出125/124,但给出4539918979204129/4503599627370496

分数(408/896)应输出51/112,但给出的是820298503567689/18014398509481984


当我将正确简化的分数输入到分数类型中时,我得到了相同的错误表示——甚至是相同的大量值。还有更多的例子说明了这一点。你知道为什么会这样吗?我能做些什么来补救吗?

用逗号分隔分子和分母:

>>> Fraction(984/1920)
Fraction(2308094809027379, 4503599627370496)
>>> Fraction(984, 1920)
Fraction(41, 80)
>>> 984 / 1920
0.5125
>>> (0.5125).as_integer_ratio()
(2308094809027379, 4503599627370496)
使用
/
意味着二进制浮点除法首先发生,然后再将输入传递给分数。因此,所显示的分数用于二进制浮点数,在将其四舍五入为分子精度为53位,分母精度为2次方的分数后:

>>> Fraction(984/1920)
Fraction(2308094809027379, 4503599627370496)
>>> Fraction(984, 1920)
Fraction(41, 80)
>>> 984 / 1920
0.5125
>>> (0.5125).as_integer_ratio()
(2308094809027379, 4503599627370496)
通过将参数分离为分数,可以传递分子和分母的精确整数,然后可以使用最大公分母算法将其缩减为最低项