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

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

  • 问题内容: 我想知道如何检查两个功能是否相同。一个示例将评估为true。据我所知,Python将检查函数是否在内存中占据相同的位置,而不是它们是否具有相同的操作。我知道拥有该功能似乎不切实际。 另一个解决方案是我可以在函数上运行以查看其包含的内容或工作方式的某些方法。因此,其中一种将返回该方法的工作方式,可能是在字典中还是在某种形式中。 我希望得到一个答案,但我怀疑这是可能的。 问题答案: 如果您