Найти в Дзене
Робототехника

Математика в программировании. Типы данных Ч2.

В одной из предыдущих статей мы начали знакомство с числами и типами обрабатываемых данных. Целочисленные типы. Сегодня переходим к наиболее распространенным типам данных - вещественным числам.

В паскале чаще всего для определения вещественного типа используется тип real. Это тип специально для вещественных чисел, но у него есть заданная точность. Сейчас рассмотрим, как это выглядит.

Представьте, что Вам нужно сложить два числа, 56565,65654465468400068784646846846835545 и число 0,06546840000000646546546548664564613584, как будет это делать человек, возьмет и сложит столбиком ( как минимум для этого стоит уметь считать столбиком), а с машиной все сложнее, сперва ей, нужно каждое число записать в память должным образом, затем сложить и после этого выводить результат.

Представляем число 56565,65654465468400068784646846846835545 в виде дроби

5656565654465468400068784646846846835545/100000000000000000000000000000000000 или 5656565654465468400068784646846846835545 /10 в 35 степени или 5656565654465468400068784646846846835545 * 10 в -35.

Для того, чтобы данное число перевести в двоичный код без потери точности, как минимум необходимо задействовать 133 бита (это легко проверяется), плюс еще есть знак.

А тип real например имеет всего 48 бит, что произойдет в таком случае, произойдет, то что Выш результат будет иметь заданную точность и не более. На определенном этапе просто произойдет округление и наименьшая часть, округленная часть числа просто отбросится,

Проверяется очень просто, есть сервис например pascal online.

Можете ввести этот программный код:

//fpc 3.0.0
program TEST;
var
a,b,c,p,q,r,t,y,z:real;
begin
a:=10000000000000000;
b:=9999999999990000;
c:=0.000000000005;
p:=a+c;
q:=p-b;
r:=a-b;
t:=r+c;
writeln(p,q);
writeln(r,t);
end.

Можете вставить код программы и проверить.

Результат

1.0000000000000000E+016 1.0000000000000000E+004
1.0000000000000000E+004 1.0000000000000005E+004

что видим из результата, сперва сложили число а и с, затем вычли b,

вторая строка, из числа a вычли число b и затем прибавили c.

в первом случае получилось 10000

во втором случае 10000. 000000000005,

Думаю понятно почему так.

Для представления очень больших и очень маленьких чисел в программировании предусмотрены специальный тип данных и специальные операции с плавающей запятой.

представление числа вещественного типа.
представление числа вещественного типа.

Любое число можно записать и представить в таком виде. Забегая вперед, скажу, что операция с плавающей запятой (floating point operation) это серьезная тема, кому очень интересно можно найти в википедии, или дождаться когда подготовлю статью. Там очень много нюансов. Но это уже больше математические преобразования и программирование.

Просто пока возьмите на заметку, что для машины вещественное число представлено в виде двоичного числа(дробная часть условно ), так называемая мантисса, в виде степени в которую возводим число 2 и умножаем мантиссу, и соответственно знака самого числа + или -.

Еще обратите внимание, что в программе(паскале) мы ввели значение

a:=10000000000000000; а компьютер на выводе представил его в виде

1.0000000000000000E+016 , это значит 1 умножено на 10 в 16 степени.

Разница в том, что человек представляет это все в десятичной системе, а машина в двоичной,(то есть таким образом только двоичным кодом записано в памяти), но на экран всегда выводится в десятичном виде.

Так например число для человека будет 3245,05 , а компьютер будет выводить в виде 3.2450500000000002E+003, хотя число одно и тоже

или например число 111111111111111111111 для человека будет как видим , а компьютер будет выводить в виде 1.1111111111111111E+020 , хотя число одно и тоже . При том обратите внимание, у нас 21 единичка,а компьютер показывает только 17, это не значит что он округлил, это значит, что не всё показано. проверить это тоже можно.

-2

Как видим из таблицы, есть еще другие типы вещественных чисел, самый простой single, самый ёмкий extended.

Теперь отметим то, что целые числа мы можем складывать или вычитать, и тогда результат будет целочисленным, то вещественные числа можем уже делить. И тут возникает программная особенность, что в вещественное число мы можем записать целое, а наоборот не сможем, компилятор паскаля например, выдает ошибку. Если же все таки необходимо сделать это(в целое число записать вещественное), необходимо совершить преобразование - округление.

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

Для сегодня думаю достаточно, если есть вопросы, то пишите.

Если Вам понравилась публикация, подписывайтесь на канал, за Ваши лайки чаще показывают Наши публикации.
Для поиска публикаций через поисковые системы, просто вводите слово Вивитроника.
Если есть вопросы или по желания, то пишите, через Обратную связь.

Наука
7 млн интересуются