Как сравнить два соотношения чисел с плавающей запятой с DBL_EPSILON? - PullRequest
0 голосов
/ 27 октября 2019

Я хочу написать следующую программу: я хотел бы отсканировать длину трех сторон треугольника (в плавающем). Затем я хотел бы снова отсканировать три стороны второго треугольника. Следующее - выяснить, похожи ли эти два треугольника. Это означает, что если соотношение одной стороны в первом треугольнике и той же стороны во втором треугольнике равно отношению второй стороны в первом треугольнике и одинакового размера во втором треугольнике и одинаково для третьей стороны, то треугольники похожи.

if(mid1/mid2 == min1/min2 && mid1/mid2 == max1/max2){
printf("Triangles are similar.\n");    

Дело в том, что если у меня есть два треугольника с размерами: Первый треугольник (9,861 9,865 9,883) и Второй треугольник (9861 9883 9865), программа говорит, что треугольники не похожи. Как использовать и записать DBL_EPSILON, чтобы он создавал приемлемое отклонение, и программа работала бы для этих чисел?

1 Ответ

0 голосов
/ 27 октября 2019

Может быть, что-то вроде этого:

#define DBL_EPSILON 0.0001

int test(float a, float b) {
    float c = a - b;
    return DBL_EPSILON <= c && c <= DBL_EPSILON;
}

void your_func() {
    ...
    if (test(mid1/mid2, min1/min2) && test(mid1/mid2, max1/max2))
        printf("Triangles are similar.\n");    
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...