Типи та моделі даних
Робота програміста полягає у створенні віртуальної копії світу, в якому ми живемо, з різними рівнями деталізації. Результатом моделювання є модель — математична абстракція сутності, явища або процесу.
Якщо програмісту потрібно відтворити процес, наприклад, нарахування податків, він має виразити це через математичні абстракції. У випадку створення реального світу в Minecraft або іншій грі модель буде складнішою. У бухгалтерській системі достатньо знати лише формули нарахування податків, а в комп’ютерній грі — як поширюється світло, працює фізика й аудіо. Під час автоматичного тестування вебсайтів ми, як програмісти, створюємо невелику модель сторінки, яку тестуємо, описуючи кнопки, поля введення та результати.
Як це пов’язано з Python і його типами даних? Модель, задумана програмістом, виражається через типи даних мови Python.
Властивості моделей
Моделі мають властивості, такі як точність і адекватність.
Адекватність моделі — це відповідність моделі реальному світові. Можна порівняти адекватність трьохвимірної моделі світу у грі Minecraft, де все квадратне, та Last of Us 2, яка наближається до фотореалізму. (Хто не бачить різниці на фото нижче, то Minecraft зліва.)
Ще один приклад: якщо ви працюєте з деревом і робите стільницю, найпростіша модель — прямокутник. Ви розраховуєте вартість на основі площі, множачи довжину на ширину. Але якщо кути закруглені, площа зменшується, і модель ускладнюється. Замовник може захотіти виріз для клавіатури, що ще більше ускладнить модель. Модель із фасками — найбільш адекватна, бо враховує всі деталі.
Зручність програмування — ще один важливий аспект. Якщо вибрано неадекватну модель, обчислення можуть не відповідати реальності, і тести не пройдуть. Неправильні типи даних можуть ускладнити обчислення.
Точність моделі — це ступінь збігу отриманих у процесі моделювання результатів із заздалегідь встановленими, бажаними.
Точність моделі — важливе питання. Наприклад, число π — ірраціональний дріб. Для шкільних задач достатньо 3,14, а NASA використовує 15 знаків після коми для міжпланетних польотів, де похибка не перевищує 1–2 см. Це показує, що точність моделі залежить від вимог до програми.
Вимоги | π |
---|---|
Вирішення шкільних завданнь | 3,14 |
Запуск місії на Сатурн | 3,141592653589793 |
Максимальна точність π в Python | 3,141592653589793 |
На змаганнях, де треба запамʼятати перші 100 знаків числа π | 3,14159265358979323846 26433832795028841971 69399375105820974944 59230781640628620899 86280348253421170679 |
Яку точність числа π використовують в NASA?
Для найточніших розрахунків JPL, які використовуються для міжпланетної навігації, ми застосовуємо значення 3.141592653589793. Давайте розглянемо це детальніше, щоб зрозуміти, чому ми не використовуємо більше знаків після коми. Думаю, ми можемо навіть побачити, що не існує фізично реалістичних розрахунків, у яких необхідно враховувати стільки десяткових знаків, скільки ви запитували.
Найдальший космічний апарат від Землі — це «Вояджер-1». На момент написання цього тексту він знаходиться приблизно за 14,7 мільярда миль (23,6 мільярда кілометрів). Будемо щедрими і округлимо цю відстань до 15 мільярдів миль (24 мільярдів кілометрів). Тепер уявімо, що у нас є коло з радіусом саме такого розміру, тобто діаметром 30 мільярдів миль (48 мільярдів кілометрів), і ми хочемо обчислити його довжину, яка дорівнює добутку π на радіус і на 2. Використовуючи π, округлене до 15-го знака після коми, як я зазначив вище, ми отримаємо трохи більше 94 мільярдів миль (понад 150 мільярдів кілометрів). Нас тут не цікавить точне значення (ви можете перемножити самостійно, якщо хочете), а лише похибка в обчисленні через використання меншої кількості знаків числа π. Іншими словами, якщо обрізати π на 15-му знаку після коми, довжина кола з діаметром 30 мільярдів миль (48 мільярдів кілометрів) буде розрахована з похибкою менше ніж півдюйма (близько одного сантиметра). Тільки задумайтеся: ми маємо коло довжиною понад 94 мільярди миль (понад 150 мільярдів кілометрів), і похибка в обчисленнях цього значення не перевищуватиме ширину вашого мізинця.
Завдання програміста полягає в наступному: розробити адекватну та точну модель, яка відображає сутність або процес із реального світу, та відтворити цю модель на вбудованих типах даних мови Python: int
, float
, str
, tuple
, list
, dict
, bool
. Якщо вбудованих типів недостатньо, програміст може створити власні складні типи даних.
Джерела
Використані зображення:
- Minecraft Image: This image is from Pixabay and was published prior to July 2017 under the Creative Commons CC0 1.0 Universal Public Domain
- Last of Us 2 Image: Attribution-NonCommercial-NoDerivs 2.0 Generic