LINUX.ORG.RU

операции с float


0

0

имеется код

#include <stdio.h>
#include <math.h>

---------------------------------------------

int main(int argc, char **argv)
{
    float f = 1.0;

    printf("%s\n", (f == 1.0 ? "equal" : "no"));

    f *= 0.8;
    f *= 0.8;

    f *= 1.25;
    f *= 1.25;

    printf("%s\n", (f == 1.0 ? "equal" : "no"));

    return 0;
}

---------------------------------------------

после выполнения на консоли видим

# gcc -o 1 1.c -lm
# ./1
equal
no

--------------------

Можно ли добится в данном примере равенства конечного значение f и 1.0 ?
anonymous

Ответ на: комментарий от Reset

f в результате получился 1.00000011920928955078, т.е.

1.00000011920928955078 - 1.0 > 1e-7

fabs(f - 1.0) < 1e-7 не подходит. м.б. правильней fabs(f - 1.0) < 1e-6 ?

anonymous
()
Ответ на: комментарий от anonymous

Кстати, результат таких сравнений может зависеть от опций оптимизации. Или от компилятора... В общем, лучше не писать такие алгоритмы, которые полагаются на равенство двух float-ов.

yz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.