如何在n*0.1的一系列中找到最接近反对数(10base)的整数(在Python中)

2024-04-25 13:42:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的算法中,我想计算当前整数n是否恰好最接近0.1的任何正倍数的反对数,因此0.1、1.0、1.1、7.9、21.5等等

反对数? 反对数(x)=10x

我在这里找到了一个在线计算器:http://ncalculators.com/number-conversion/anti-log-logarithm-calculator.htm但在任何地方我都找不到用Python或任何其他编程语言来实现这一点的例子。在

如果我不能用Python找到一系列数字的反对数,我就不得不在我的程序中存储一个反对数值的列表,为了提高性能,我可能会考虑无论如何,但是如果能找出如何在代码中实现这一点,那就太好了。在

更新: 通过第一个答案的代码,我能够做到这一点,这段代码充分展示了我所要做的一切:

#!/usr/bin/python
import sys
import math

for x in xrange(1, 1000000):
    target = round(math.log10(x),1)
    int_antilog = int(10**target+0.5) #fast round() alternative
    if (x == int_antilog):
        print 'do something at call ' + str(x)

Tags: 代码importcom算法httpnumbertarget整数
2条回答

Python有一个power operator,它执行您要执行的求幂运算:

def antilog(x):
    return 10 ** x

示例:

^{pr2}$

用你喜欢的方式取整并转换成整数,你就可以开始了。在

如果k是与0.1的倍数的幂最接近的整数,那么k ≈ 10ᵐʳ,其中m是整数,r=0.1,所以ln k ≈ m r ln 10和{}。如果u = log₁₀(k)/r,那么最接近k的0.1的倍数的10的值是10的r乘以u的下限或u的上限,如下面的代码所示。在

import math

def aloghilo(k):
    u = 10*math.log10(k)
    return (10**(math.floor(u)/10), 10**(math.ceil(u)/10))

def isantilog(k):
   (lo,hi) = aloghilo(k)
   return k==round(lo) or k==round(hi)

以下是通过ipython解释器得到的结果示例:

^{pr2}$

相关问题 更多 >