Skip to content

Commit 913e94d

Browse files
committed
Дополнил 2.2 и 3.3 ссылкой на коммент про хранение double в памяти
1 parent 2660408 commit 913e94d

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

lang_c/2/1__tipy_dannyh/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
Как уже говорилось ранее, программы работают с различными данными, а не только с числами. И если для человека записи `x = 3`, `x = 3.0` и `x = три` несут одинаковую смысловую нагрузку, то для компьютера это не так. Мы понимаем, что в каждой из этих записей говорится, что `х` равен трём. Компьютер же пока не настолько умен, чтобы это осознать. Ему нужно точно знать, с какими данными он будет работать. И дело даже не в том, число это или слово, ему важно даже то, целое это число или вещественное. Поэтому все переменные имеют дополнительную характеристику -- =тип данных=.
88

9-
Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности 0 и 1. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа `3` и `3.0` будут записаны совершенно по-разному. Для тех, кто заинтересовался представлением чисел в памяти компьютера, в конце урока есть ссылки на дополнительные материалы по этой теме.
9+
Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности `0` и `1`. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа `3` и `3.0` будут записаны совершенно по-разному. Для тех, кто заинтересовался представлением чисел в памяти компьютера, в конце урока есть ссылки на дополнительные материалы по этой теме.
1010

1111
Кроме того, зачастую компьютеры гораздо быстрее и лучше могут производить различные действия с целыми числами, чем с вещественными. Если вы не забросите этот курс, то на одном из следующих уроков мы в этом убедимся. Раньше, когда компьютеры занимали целую комнату, это была безусловная истина, а теперь этот факт уже нужно проверять.
1212

lang_c/2/1__tipy_dannyh/reference.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@
55
2. Подробный материал о том, как хранятся различные числа в памяти компьютера.
66
* К.Ю. Поляков, А.П. Шестаков, Е.А. Еремин. [Алгоритмизация и программирование](http://kpolyakov.spb.ru/download/inf-2011-01.pdf) // Информатика, № 17, 2011, с. 4-33. [зеркало](./komp_arifm.pdf)
77

8-
3. Cтатья о том, как хранятся вещественные числа в компьютере и какие с ними могут происходить казусы. [Cсылка](https://habrahabr.ru/post/112953/)
8+
3. Cтатья о том, как хранятся вещественные числа в компьютере и какие с ними могут происходить казусы. [Cсылка](https://habrahabr.ru/post/112953/)
9+
10+
[Здесь](https://stepik.org/lesson/41090/step/8?discussion=12049389&reply=12052387&unit=30904) на примере сравнительно небольшого числа `double r = 140737488355329.984375;` довольно подробно объясняю, как компилятор сохранит его в памяти компьютера.

lang_c/3/2__formatnyi_vyvod_printf/reference.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,22 @@ int main(void)
1616
printf("Type: float\n");
1717
printf("precision 4\t-- %.4f\n", float_result);
1818
printf("precision 12\t-- %.12f\n", float_result);
19-
printf("precisson 16\t-- %.16f\n", float_result);
19+
printf("precision 16\t-- %.16f\n", float_result);
2020
2121
printf("\n=====================================\n");
2222

2323
printf("Type: double\n");
2424
printf("precision 4\t-- %.4f\n", double_result);
2525
printf("precision 12\t-- %.12f\n", double_result);
26-
printf("precisson 16\t-- %.16f\n", double_result);
26+
printf("precision 16\t-- %.16f\n", double_result);
2727
28-
2928
return(0);
3029
}
3130
```
3231
3332
Причина подобного результата в том, что количество памяти выделенное для хранения любой переменной ограничено. Поэтому все вещественные числа хранятся в памяти компьютера приближенно. Для типа `float` памяти выделяется обычно меньше, чем для типа `double`. Поэтому возникают такие забавные моменты. Отдельно обратите внимание на результат деления целых чисел, записанный в переменную `z`. Об этом мы поговорим в четвёртом уроке.
3433
34+
[Здесь](https://stepik.org/lesson/41090/step/8?discussion=12049389&reply=12052387&unit=30904) на примере сравнительно небольшого числа `double r = 140737488355329.984375;` довольно подробно объясняю, как компилятор сохранит его в памяти компьютера.
3535
3636
2\. Функция `printf` в результате своей работы возвращает целое число (тип `int`) -- количество выведенных на экран символов.
3737

0 commit comments

Comments
 (0)