2026-03-28

Блеск и нищета float

Какое расстояние между соседними числами в float? Что будет если к числу с плавающей точной прибавить другое чесло с плавающей точкой? Зависит от значения, результат может равняться ожидаемому но в некторых случаях разница между результатом и исходным числом может быть нулевой а в некторых отличаться на несколько сотен!

#include <stdio.h>

int main(void) {
    float x = 1e10f;

    printf("x        = %.0f\n", x);
    printf("x + 1    = %.0f\n", x + 1.0f);
    printf("x + 1000 = %.0f\n", x + 1000.0f);
    printf("x + 1024 = %.0f\n", x + 1024.0f);

    return 0;
}
	

x = 10000000000
x + 1 = 10000000000
x + 1000 = 10000001024
x + 1024 = 10000001024

Из-за особенностей хранения float при малых значениях точность представления чисел сопоставима с int а на больших значениях рассторяния между числами на численной оси увеличиваются и достигают довольно больших значени. Прям очень неожиданно может получиться если это не учитывать!

 

комментарии:

 

Для того чтобы каждый раз не представляться можно войти как зарегистрированный пользователь.

Имя*

разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться