Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб_1_метод_указания прога.doc
Скачиваний:
3
Добавлен:
03.11.2018
Размер:
301.57 Кб
Скачать

9. Проанализируйте преобразование типов в операторах присваивания:

#include <stdio.h> #include <conio.h>

int main() {double d; float f; long l; short sh; sh = l= f = d = 100/3; //целое деление, т.к. числа без точки //присваивание выполняется справа налево printf (”f=%g\t”, (double)d); // 33 printf (”f=%g\t”, (double)f); // 33 printf (”l=%g\t”, (double)l); // 33 printf (”sh=%g\t\n”, (double)sh); // 33

d = f= l = sh = 100/3; //целое деление printf (”sh=%g\t”, (double)sh); // 33 printf (”l=%g\t”, (double)l); // 33 printf (”f=%g\t”, (double)f); // 33 printf (”f=%g\t\n”, (double)d); // 33

sh = l= f = d = 100/3.; //деление с плавающей точкой printf (”f=%g\t”, (double)d); // 33.333333 printf (”f=%g\t”, (double)f); // 33.333332 printf (”l=%g\t”, (double)l); // 33 printf (”sh=%g\t\n”, (double)sh); // 33

d = f= l = sh = (double)100/3; // деление с плавающей точкой ((...)100)/3 printf (”sh=%g\t”, (double)sh); // 33 printf (”l=%g\t”, (double)l); // 33 printf (”f=%g\t”, (double)f); // 33 printf (”f=%g\t\n”, (double)d); // 33

sh = l= f = d = (double)(100000/3); // целое деление printf (”f=%g\t”, (double)d); // 33333 printf (”f=%g\t”, (double)f); // 33333 printf (”l=%g\t”, (double)l); // 33333 printf (”sh=%g\t\n”, (double)sh); //число может не попасть в диапазон типа!!

d = f= l = sh = 100000/3; //целое деление printf (”sh=%g\t”, (double)sh); // 33333 присваивание выполняется первым printf (”l=%g\t”, (double)l); // число может не попасть в диапазон printf (”f=%g\t”, (double)f); // и все остальные присваивания будут неверны printf (”f=%g\t\n”, (double)d); _getch();

return 0;

}

Особенности представления чисел по двоичному основанию

Особенность представления чисел по двоичному (шестнадцатеричному) основанию – это невозможность осуществления точного перевода числа в заданную систему. Например, число 0.5 переводится в 2-ичную систему «точно»: 0.5 10 = 0.1 2 . Число 0.1 точного перевода не имеет и его значение определяется лишь заданной точностью (количеством получаемых цифр): 0.1 10 = 0.1FFF16 = 0.000111111111 2. Это формирует как бы первый уровень возможных ошибок в представлении числа.

Особенности выполнения арифметических операций над вещественными числами

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