我已经实现了一个类Fraction
,原始模块可以接受一个类型号float
并将其转换为两个整数,一个分母和一个分子。我的版本不知道怎么实现这个,用什么算法
点播代码:
def NOD(a, b):
while a and b:
if a < b:
b %= a
else:
a %= b
return max(a, b)
def NOK(a, b):
return a * b / NOD(a, b)
class fraction():
def __init__(self, x, y = 1):
self.x, self.y = x, y
def __repr__(self):
return f"{self.x} {self.y}"
def __add__(self, other):
n = NOK(self.y, other.y)
d1, d2 = n / other.y, n / self.y
return fraction(self.x * d1 + other.x * d2, n)
嗯,首先,你可以做
然后将分数减少到不可约
您需要的精度越高,您需要的除数就越多
在 C++ 中,我只需
float
将尾数作为整数取出,然后除以指数作为整数进行解析而在 python 中,理论上,使用它们的无限
int
,你可以简单地采用10**n
一个超过大小的浮点数(Python 真实的似乎有双精度)附言
理论上,任何实数都可以变成连分数
维基百科
如果已经定义了加分数的操作,那么最后你可以得到最接近所需实数的所需简单分数
这种方法虽然相当慢(会有几个操作),但可能是最准确的
精确转换
float
为分数的说明:使用 .转换
float
为精确的十六进制数作为字符串.hex()
。例子:
您将始终获得相同的格式,整数部分后有一个点,字母后有 13 个十六进制数字和一个指数
p
。此条目意味着
或(减少到一个共同点后)
或(乘分数后)
现在很清楚了
-(1*16**13 + 2*16**12 + 4*16**11 + ... + 0) * 2**4
是16**13
(总是)。float
,int
和一些其他类型有一个方法as_integer_ratio
,它返回两个元素的元组,分子和分母。例子