相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

比较浮点值有多危险?

我知道因UIKit使用CGFloat分辨率独立坐标系而使用.

但我想,以检查是否例如每次frame.origin.x0它让我感到恶心:

if (theView.frame.origin.x == 0) {
    // do important operation
}
Run Code Online (Sandbox Code Playgroud)

是不是CGFloat有比较时容易误报==,<=,>=,<,>?这是一个浮点,他们有不寻常的问题:0.0000000000041例如.

Objective-C在比较时是在内部处理这个,还是可能发生origin.x读取为零的情况并不是0真实的?

c floating-point objective-c floating-accuracy ios

381
推荐指数
6
解决办法
9万
查看次数

Python浮点任意精度可用吗?

只是为了好玩,因为它非常简单,我编写了一个简短的程序来生成嫁接数,但由于浮点精度问题,它没有找到一些更大的例子.

def isGrafting(a):
  for i in xrange(1, int(ceil(log10(a))) + 2):
    if a == floor((sqrt(a) * 10**(i-1)) % 10**int(ceil(log10(a)))):
      return 1

a = 0
while(1):
  if (isGrafting(a)):
    print "%d %.15f" % (a, sqrt(a))
  a += 1
Run Code Online (Sandbox Code Playgroud)

此代码缺少至少一个已知的嫁接编号.9999999998 => 99999.99998999999999949999999994999999999374999999912... 它乘以后似乎会降低额外的精度10**5.

>>> a = 9999999998
>>> sqrt(a)
99999.99999
>>> a == floor((sqrt(a) * 10**(5)) % 10**int(ceil(log10(a))))
False
>>> floor((sqrt(a) * 10**(5)) % 10**int(ceil(log10(a))))
9999999999.0
>>> print "%.15f" % sqrt(a)
99999.999989999996615
>>> print "%.15f" % (sqrt(a) * 10**5) …
Run Code Online (Sandbox Code Playgroud)

python floating-point floating-accuracy

42
推荐指数
4
解决办法
5万
查看次数

为什么sympy不能像(6-x*x)**(1.5)那样计算分数幂公式?

我用sympy来计算一些积分,如下所示.

#Calculate Calculus
import sympy
x = sympy.Symbol('x')
f = (6-x*x)**(1.5)
f.integrate()
Run Code Online (Sandbox Code Playgroud)

这将失败,并抛出例外:

ValueError: gamma function pole
Run Code Online (Sandbox Code Playgroud)

如果我只使用整数作为功率num,它工作正常

f = (6-x*x)**(2)
#result: x**5/5 - 4*x**3 + 36*x
Run Code Online (Sandbox Code Playgroud)

python sympy mathematical-expressions

5
推荐指数
1
解决办法
599
查看次数