【发布时间】:2021-05-26 05:23:34
【问题描述】:
问题陈述:
我试图确定一个对数是否“完美”,即没有余数。我遇到的问题是math.log() 总是返回一个浮点数。
我读到这个:https://docs.python.org/3/tutorial/floatingpoint.html
这是我目前的解决方案:
import sys
import math
def is_even_log(argument, base):
x = math.log(argument, base) # yields float
numerator, denominator = x.as_integer_ratio()
print(
f"numeratorerator: {numerator}, "
f"denominatorominator: {denominator}")
if numerator % denominator == 0:
print(f"Log base {base} of {argument} is even")
return True
else:
print(f"Log base {base} of {argument} is not even")
return False
is_even_log(int(sys.argv[1]), int(sys.argv[2]))
问题
只是好奇是否有人有更好的方法来做到这一点?我想我可以访问 PyObject 的某些属性,该属性指示是否存在余数。
【问题讨论】:
-
argument和base是整数吗?base是肯定的吗?对数的“完美”是什么意思?这是否意味着它是一个整数?还是说它是理性的? (4 的以 16 为底的对数正好是 ½。那是“完美的”吗?) -
@EricPostpischil 好点。我想我应该说“完美”是如果 arg 和 base 都是整数并且 log 是整数。我想我已经写的是最干净的。也许我应该再深入研究一下 float 的实现。我想这真的与对数没有任何关系,更多的是与“如何确定浮动是否没有余数”
标签: python-3.x floating-point logarithm