浮点数比较

Tuesday, August 18, 2020

计算机中的浮点数并不精确, 不能直接用 == 比较两个浮点数是否相等, 应在可接受的范围定义一个比较小的数 epsilon , 两个浮点数之差小于 epsilon 即认为他们相等

C

#include <float.h>
#include <math.h>
#include <stdbool.h>

bool almost_equal(const double a, const double b){
    return (fabs(a - b) < DBL_EPSILON);
}

C++

#include <cmath>
#include <limits>

bool almost_equal(const double a, const double b){
    return (fabs(a - b) < std::numeric_limits<double>::epsilon());
}

Qt

#include <QtGlobal>

qFuzzyCompare(a, b);

Javascript/QML

function almost_equal(a, b) {
	return (Math.abs(a - b) < Math.pow(2, -52))
}
ccppqtjsalgorithm

Git

this_thread::sleep_for()和chrono::duration, ratio;