我正在编写一个程序来搜索小数基中整数的重复表示。因此,我不得不这样做:
1.1**7等于1.9487171。然而,python自动将结果表示为浮点数,而给定的值是精确的。这就是我所需要的,这与舍入浮点数不一样。我还必须允许程序指定小数点有多少位。我试过使用十进制模块,但不能完全让它工作。做这件事最好的方法是什么?
发布于 2017-03-20 01:12:44
十进制模块会给出准确的结果:
>>> Decimal('1.1') ** 7
Decimal('1.9487171')对于非十进制基,分数模将执行精确的算术.不过,唯一的问题是输出是小数形式,而不是表示您似乎想要的十进制表示法(可能带有重复的、不终止的序列):
>>> Fraction(3, 7) ** 5
Fraction(243, 16807)
>>> Context(prec=200).divide(243, 16807)
Decimal('0.014458261438686261676682334741476765633367049443684179211043017790206461593383709168798714821205450110073183792467424287499256262271672517403462842863092758969477003629440114238115071101326828107336229')发布于 2017-03-20 02:36:58
分数基
听起来像fractions,不是吗?
>>> import fractions
>>> fractions.Fraction(11, 10) ** 7
Fraction(19487171, 10000000)
>>> fractions.Fraction(13, 11) ** 7
Fraction(62748517, 19487171)发布于 2017-03-20 01:17:21
你试过在容忍范围内检查平等吗?例如。
def approx(left, right, tolerance=1**10-6):
if left - right < tolerance:
return True
else:
return Falsehttps://stackoverflow.com/questions/42894306
复制相似问题