相关疑难解决方法(0)

浮动和双重比较最有效的方法是什么?

比较两个double或两个float值的最有效方法是什么?

简单地这样做是不正确的:

bool CompareDoubles1 (double A, double B)
{
   return A == B;
}
Run Code Online (Sandbox Code Playgroud)

但是像这样:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)

似乎浪费处理.

有谁知道更聪明的浮动比较器?

c++ algorithm floating-point optimization

495
推荐指数
13
解决办法
39万
查看次数

比较浮点值有多危险?

我知道因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万
查看次数

如何确定是否存在模板专门化

我想检查某个模板专业化是否存在,其中一般情况没有定义.

鉴于:

template <typename T> struct A; // general definition not defined
template <> struct A<int> {};   // specialization defined for int
Run Code Online (Sandbox Code Playgroud)

我想定义一个像这样的结构:

template <typename T>
struct IsDefined
{
    static const bool value = ???; // true if A<T> exist, false if it does not
};
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点(理想情况下没有C++ 11)?

谢谢

c++ templates sfinae template-specialization

15
推荐指数
1
解决办法
1695
查看次数

现代 C++ 中比较 double/float 是否相等的现代实践

if (std::abs(double1 - double2) < std::numeric_limits<double>::epsilon())
  std::cout<<"Equal";
else
  std::cout<<"Not equal";
Run Code Online (Sandbox Code Playgroud)

这段代码与现代 C++11/14/17/21 仍然是我们比较 float 和 double 的方式吗,或者现在只需编写就可以了

if (double1 == double2)
Run Code Online (Sandbox Code Playgroud)

编译器会为我们处理 epsilon 问题吗?

顺便说一句:在检查 epsilon 时,写 < 或 <= 更好吗?

c++ floating-point c++11

4
推荐指数
1
解决办法
6615
查看次数

如何检查2个浮点数是否相等(有一些给定的误差值)?

我知道如何检查两个浮点数是否almost相等,简单代码:

bool compare(double a, double b)
{
    if(fabs(a - b) < (1.0 / 10000000))
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

但是当我有一些随机数据时,让我们说9.0和9.5,或者9.4我希望将它们视为相同数字,如何做到这一点?我的意思是,他们不相等,但我可以允许一些小错误+/- 0.5.有任何想法吗?

有了这个错误,我可以处理数字:

9.1 and 9.0 
3.1 and 3.6
-4.2 and -4.6
Run Code Online (Sandbox Code Playgroud)

平等的

c floating-point floating-point-precision

0
推荐指数
2
解决办法
1562
查看次数