当前位置: 首页 > 面试题库 >

检查float是否等效于python中的整数

沈龙光
2023-03-14
问题内容

在Python 3中,我正在检查给定值是否为三角形,也就是说,对于某个正整数n,它可以表示为n(n + 1)/ 2

我可以写:

import math
def is_triangular1(x):
    num=(1/2) * (math.sqrt(8*x+1)-1 )
    return int(num)==num

还是我需要这样做?:

epsilon = 0.000000000001
def is_triangular2(x):
    num=(1/2) * (math.sqrt(8*x+1)-1 )
    return abs(int(num) - num)<epsilon

我检查了两个函数对于x的返回结果是否相同,直到1,000,000。但是我不确定一般来说int(x)==
x是否总是可以正确确定一个数字是否为整数,因为例如5表示为4.99999999999997等。

据我所知,第二种方法是正确的方法,如果我用C来做的话,但是我不确定Python 3。


问题答案:

您将要做后者。在 Python 3编程中, 给出以下示例作为比较的最准确方法

def equal_float(a, b):
    #return abs(a - b) <= sys.float_info.epsilon
    return abs(a - b) <= chosen_value #see edit below for more info

另外,由于epsilon是“机器可以区分两个浮点数的最小差异”,因此您需要在函数中使用<=。

编辑
:阅读下面的评论后,我回顾了这本书,它具体说:“这是一个用于比较浮标是否等于机器精度极限的简单函数”。我相信这只是将浮点数与极高精度进行比较的一个示例,但是事实上,很多浮点数计算都会引入误差,因此即使使用它也很少。我将其描述为在答案中进行比较的“最准确”的方法,从某种意义上说这是正确的,但很少比较浮点数或整数与浮点数的含义。正确的方法是基于函数的“问题域”选择一个值(例如:0.00000000001),而不使用sys.float_info.epsilon。

感谢S.Lott和Sven Marnach的更正,如果我带领任何人走错了道路,我深表歉意。



 类似资料:
  • 问题内容: 最近,我遇到了一些Java代码,这些代码简单地将一些字符串放入Java TreeSet中,为其实现了基于距离的比较器,然后在日落时分快乐地计算出给定的分数来解决给定的问题。 我的问题 是否有适用于Python的等效数据结构? Java树集看起来基本上是一个有序字典,可以使用某种比较器来实现这种排序。 我看到有一个用于 OrderedDict的Py3K的PEP,但是我使用的是2.6.x。

  • 问题内容: 有没有办法检查两个(非平凡的)选择是否等效? 最初,我希望两个选择在形式上等效,但是proving-sql-query-equivalency中的答案使 我停滞不前。 对于我的实际需要,我可以只检查两个选择的(实际)结果是否相同。 问题答案: 如果要比较查询结果,请尝试以下操作: 这将导致所有行仅由查询之一返回。

  • 问题内容: 如何检查变量是否为整数? 问题答案: 如果你需要这样做,请执行 除非你使用的是Python 2.x,否则需要 不要使用type。在Python中,这几乎永远不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你子类化int,则你的新类应注册为int,但type不会这样做: 这符合Python强大的多态性:你应该允许行为类似于的任何对象int,而不是强制将其作为一个对象。 BUT

  • 问题内容: Java是否具有等效于Python 方法的方法? 问题答案: Guava还提供类似于Python的东西: 您也可以使用Guava的AbstractIterator实现一个相当简单的迭代器来执行相同的操作:

  • 问题内容: 检查字符串是否可以在Python中表示为数字的最佳方法是什么? 我目前拥有的功能是: 它不仅丑陋而且缓慢,看起来笨拙。但是我还没有找到更好的方法,因为调用函数甚至更糟。 问题答案: 不仅丑陋而且缓慢 我都对此表示怀疑。 正则表达式或其他字符串解析方法将更难看,更慢。 我不确定任何事情都可以比上述速度更快。它调用该函数并返回。不会带来太多的开销,因为最常见的异常是在没有大量搜索堆栈帧的情

  • 问题内容: 我有两个对象,想要将它们配对,就像Python中的函数一样。我很确定JDK中没有此功能,但是在相当广泛的库中是否有类似Apache通用收藏集的类似内容?谢谢。 问题答案: 功能Java具有,以及您对Haskell或Scala的期望。(实际上,作者几乎都是Haskell程序员。)