Завдання 2  Дедлайн 9 листопада

Дайте відповіді на питання:

1. Назвіть чотири основні типи даних в програмуванні. До якого з них належить C++ тип char, який часто використовується для зберігання окремих символів?
2. У чому полягає різниця між intsigned та signed int?
3. У чому полягає різниця між signed char,unsigned char та char?
4. Яким є розмір в байтах типу long?
5. Опишіть підхід до перевірки двох значень float чи double на рівність. Чому його потрібно застосовувати замість операторів == та !=?

Відповіді

Відповіді на запитання другого завдання:

1. Назвіть чотири основні типи даних в програмуванні. До якого з них належить C++ тип char, який часто використовується для зберігання окремих символів?

Цілі, дійсні, символьний тип, логічний тип.
char належить до цілих.

2. У чому полягає різниця між int, signed та signed int?

Між ними немає різниці - це той самий тип (ціле число зі знаком).

3. У чому полягає різниця між signed char, unsigned char та char?

char не має визначеного діапазону значень. У залежності від компілятора, це синонім або signed char, або unsigned char.
signed char набуває значень від -128 до 127.
unsigned char набуває значень від 0 до 255.

4. Яким є розмір в байтах типу long?

4 на 32-бітній архітектурі, 8 на 64-бітній.

5. Опишіть підхід до перевірки двох значень float чи double на рівність. Чому його потрібно застосовувати замість операторів == та !=?

Щоб порівняти два дійсних числа на рівність потрібно перевірити, чи модуль їх різниці менший за наперед вибране відносно невелике значення. Якщо це так, то вважається, що різниця між числами достатньо мала, щоб вважати їх рівними.
Причиною є накопичення похибки при обчисленнях, що може робити результат неочікуваним. Оператори == та != гарантовано коректно порівнюють значення дійсних типів лише якщо обидва значення ініціалізовані ідентичними виразами, а не просто математично еквівалентними.

Приклад
Перестановка операндів змінює результат, зверніть увагу на оголошення a та b:





#include <cmath>	// std::fabs() - модуль числа.
#include <iostream> // std::cin, std::cout, std::endl, std::boolalpha.

int main()
{
	double a = (1.5 - 0.5 - 0.5 - 0.3 - 0.2);
	double b = (1.5 - 0.5 - 0.3 - 0.2 - 0.5);
	std::cout << a << std::endl; // 0
	std::cout << b << std::endl; // -5.55112e-17
	// Звичайне порівняння.
	bool equal = (a == b);
	std::cout << std::boolalpha << equal << std::endl; // false
	// Порівняти модуль різниці з певною точністю.
	equal = (std::fabs(a - b) < 0.000000001);
	std::cout << std::boolalpha << equal << std::endl; // true
	return 0;
}

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Максимальный размер загружаемого файла: 1 ГБ. Вы можете загрузить: изображение, аудио, видео, документ, таблица, интерактив, текст, архив, код, другое. Ссылки на YouTube, Facebook, Twitter и другие сервисы, вставленные в текст комментария, будут автоматически встроены. Перетащите файл сюда