Другие языки программирования и технологии

Какова природа вещественных чисел в Си?

Ну например натуральные числа типа (int), из данных берется 4 байта и преобразовывается в длинное! число, на double & float дается, вроде 8 байт, но обычно точка плавающая, как понимать этот феномен с точкой?
Это запись чисел в двоичной разрядной сетке в экспоненциальной форме - отдельно друг за другом знак, порядок, мантисса.
https://ru.wikipedia.org/wiki/Число_двойной_точности
На float, кстати, дается 4 байта, а не 8.
Виктор Магеря
Виктор Магеря
86 770
Лучший ответ
Андрей Кобелев Да уж, круто сказанул? А на лад, тех кто не окончил высшее образование?
не вдаваясь в дебри, рассмотрим числа с плавающей точкой в противовес числам с фиксированной точкой (тоже время от времени используются). будем для простоты считать, что числа записываются в память в десятичном виде, хотя это и не так.

допустим у нас есть ячейка с фиксированной точкой, в которую мы можем записать 10 цифр до точки и 10 цифр после.
вроде все прекрасно, можем записать и число 123456789.0 и 0.0123456789 и даже 1234567890.0123456789

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

или наоборот, нужно посчитать факториал числа, у которого целая часть стремительно растет, а дробная не нужна вообще. только зря точность отнимает.

или третий вариант - тангенс угла. он может быть как огромным, близким к бесконечности, так и совсем мизерным. и тут не угадаешь, сколько цифр отложить для целой части, а сколько для дробной

вот в этом случае и используются числа с плавающей точкой. в них, грубо говоря, есть те же 20 ячеек для хранения цифр, но кроме этого еще и точку можно поставить в любой позиции.
можно даже записать число вида 0.00000000000000000001234567890123456789, сдвинув точку далеко влево.

важно: 20 цифр взяты для примера, на самом деле в компьютере размер поля задается в двоичных разрядах, и даже такое, казалось бы, простенькое число как 0.1 невозможно записать в память без потери точности