Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中floor()函数的意外值_Python - Fatal编程技术网

python中floor()函数的意外值

python中floor()函数的意外值,python,Python,输出为: import numpy import math x = numpy.roots([2,-2,(21 - 21**2)]) print x[0], math.floor(x[0]) 我希望 15.0 14.0 我不希望有任何理由让底数等于14.0。请解释 似乎x[0]比15稍小,因此floor将值降低到14。根查找算法是数值算法而不是符号算法,浮点算法并不精确。似乎x[0]比15稍小,因此floor将值降低到14。寻根算法是数值算法,而不是符号算法,浮点算法并不精确。浮点数只是

输出为:

import numpy
import math

x = numpy.roots([2,-2,(21 - 21**2)])
print x[0], math.floor(x[0])
我希望

15.0 14.0 

我不希望有任何理由让底数等于14.0。请解释

似乎
x[0]
比15稍小,因此
floor
将值降低到14。根查找算法是数值算法而不是符号算法,浮点算法并不精确。

似乎
x[0]
比15稍小,因此
floor
将值降低到14。寻根算法是数值算法,而不是符号算法,浮点算法并不精确。

浮点数只是某些值的近似值,所有计算都可能引入舍入误差。打印浮点数也可能会将数字舍入到更少的位数。试一试

15.0 15.0

确保显示所有数字。我猜它会显示类似于
14.999999999999

浮点数只是某些值的近似值,所有计算都可能引入舍入误差。打印浮点数也可能会将数字舍入到更少的位数。试一试

15.0 15.0

确保显示所有数字。我猜它会显示类似于
14.999999999999

您的代码没有为我提供相同的内容:

print repr(x[0]), repr(math.floor(x[0]))
然而,这里潜伏着一个数字14。这是一个根源:

>>> import numpy
>>> import math
>>>
>>> x = numpy.roots([2,-2,(21 - 21**2)])
>>> print x[0], math.floor(x[0])
15.0 15.0

您的代码没有为我提供相同的信息:

print repr(x[0]), repr(math.floor(x[0]))
然而,这里潜伏着一个数字14。这是一个根源:

>>> import numpy
>>> import math
>>>
>>> x = numpy.roots([2,-2,(21 - 21**2)])
>>> print x[0], math.floor(x[0])
15.0 15.0

我以前使用过一个名为
fAlmostEqual
的函数,它基于numpy的函数:

>>> print x
[ 15. -14.]
这张照片是:

def fuzzyFloor(v):
    """Returns the floor of the given number, unless it is equal to its
    ceiling (within floating point error)."""
    floor = math.floor(v)
    if fAlmostEqual(floor+1, v):
        return floor+1
    return floor

print fuzzyFloor(14.9999999999999)
print fuzzyFloor(15)
print fuzzyFloor(14.99)
print fuzzyFloor(14.5)

我以前使用过一个名为
fAlmostEqual
的函数,它基于numpy的函数:

>>> print x
[ 15. -14.]
这张照片是:

def fuzzyFloor(v):
    """Returns the floor of the given number, unless it is equal to its
    ceiling (within floating point error)."""
    floor = math.floor(v)
    if fAlmostEqual(floor+1, v):
        return floor+1
    return floor

print fuzzyFloor(14.9999999999999)
print fuzzyFloor(15)
print fuzzyFloor(14.99)
print fuzzyFloor(14.5)


即使你用钢笔和纸计算根,你也会发现它们会给出完美的正方形。“没有理由,不到15岁。”Shubham除非你使用符号算法,否则计算机上的工作原理就不是这样的。你没有这样做。打印出
repr(x[0])
以了解更多信息。感谢您提供的信息。我不知道根的计算是不精确的。即使你用钢笔和纸计算根,你会发现它们会给出完美的正方形。“没有理由,不到15岁。”Shubham除非你使用符号算法,否则计算机上的工作原理就不是这样的。你没有这样做。打印出
repr(x[0])
以了解更多信息。感谢您提供的信息。我不知道根计算不精确。我希望x[0]真的是14.999999或类似的值。我希望x[0]真的是14.999999或类似的值。我想你是对的。基本上,如果数字有小数部分或没有小数部分,我需要一种方法:经典技术-是floor(x)==x吗?可以预期,数字根查找器返回的每个值都不会满足
floor(x)==x
。你问的问题不合理。你不能指望用浮点计算精确的算术。@SvenMarnach:我认为你的答案是错误的。他的代码没有像广告中所说的那样运行。看看我的答案。另外,
print repr(x[0])、repr(math.floor(x[0]))
的输出是
15.0 15.0
@DavidHeffernan:所以没有技术知道根是否完美?实际上我最后的评论是piffle。您可以像现在一样求解根。然后四舍五入到最接近的整数。然后用这个整数计算你的方程。如果整数方程解了,那么你知道你有整数根。我想你是对的。基本上,如果数字有小数部分或没有小数部分,我需要一种方法:经典技术-是floor(x)==x吗?可以预期,数字根查找器返回的每个值都不会满足
floor(x)==x
。你问的问题不合理。你不能指望用浮点计算精确的算术。@SvenMarnach:我认为你的答案是错误的。他的代码没有像广告中所说的那样运行。看看我的答案。另外,
print repr(x[0])、repr(math.floor(x[0]))
的输出是
15.0 15.0
@DavidHeffernan:所以没有技术知道根是否完美?实际上我最后的评论是piffle。您可以像现在一样求解根。然后四舍五入到最接近的整数。然后用这个整数计算你的方程。如果整数方程被解了,那么你知道你有整数根。这就是它的原理。在您的机器上,用python和numpy,x[0]可能略大于15。@DavidHeffernan:明白。我将保留我的答案,以便其他人看到我的错误并加以纠正。好吧,事情就是这样发展的。在您的机器上,用python和numpy,x[0]可能略大于15。@DavidHeffernan:明白。我将保留我的答案,以便其他人可以看到我的错误并加以纠正。