相关疑难解决方法(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万
查看次数

使用epsilon将double比较为零

今天,我正在查看一些C++代码(由其他人编写)并找到了这一部分:

double someValue = ...
if (someValue <  std::numeric_limits<double>::epsilon() && 
    someValue > -std::numeric_limits<double>::epsilon()) {
  someValue = 0.0;
}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚这是否有意义.

文档epsilon()说:

该函数返回1和大于1的最小值之间的差值,可以表示[乘双].

这是否也适用于0,即epsilon()最大值是否大于0?或者有没有之间的数字0,并0 + epsilon可以由代表double

如果没有,那么比较不等于someValue == 0.0

c++ double

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

获取 CGFloat 最接近的值

我很好奇是否有一种方法可以通过现代 api 快速实现最接近的值?

例如:

let x = [1.2, 3.4, 4.5, 6.7, 8.9]
print(x.getClosestValue(3.7) //3.4
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用map和reduce,但仍然无法解决这个问题。出现的问题是我必须迭代整个数组才能检测误报。在某些情况下,您可以拥有多个最接近的值,所以只是想知道如何快速完成此操作?

arrays ios swift swift2 swift3

2
推荐指数
1
解决办法
614
查看次数