Десятковий тип даних

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Мови програмування (або компілятори для них) частіше за все надають вбудований (примітивний) або бібліотечний десятковий тип даних для представлення неповторюваних десяткових дробів, таких як 0.3 або -1.17, без округлення, і для виконання арифметики з ними. Прикладом є тип decimal. Decimal мови Python і аналогічні типи інших мов програмування .

Обґрунтування[ред. | ред. код]

Дробові числа підтримуються більшістю мов програмування як числа з плаваючою або фіксованою комою. Однак такі представлення зазвичай обмежують знаменник ступенем двійки. Більшість десяткових дробів (або більшість дробів загалом) не можна точно представити як дріб зі знаменником, який є ступенем двійки.

Наприклад, простий десятковий дріб 0.3 (3/10) може бути представлений як 5404319552844595/18014398509481984 (0,299999999999999988897769. . . ). Ця неточність викликає багато проблем, знайомих досвідченим програмістам. Наприклад, вираз 0.1 * 7 == 0.7 може суперечливо мати значення false у деяких системах через неточність подання десяткових знаків.

Хоча всі десяткові дроби є дробами, і, відтак, можна використовувати раціональний тип даних для їх точного представлення, у багатьох випадках може бути зручніше розглядати лише неперіодичні десяткові дроби (дроби, знаменник яких є ступенем десяти). Наприклад, дробові одиниці валюти в усьому світі здебільшого базуються на знаменнику, який є ступенем числа десять. Також більшість дробових вимірювань у науці повідомляється як десяткові дроби, на відміну від дробів з будь-якою іншою системою знаменників.

Десятковий тип даних може бути реалізований одним способом:

  1. число з рухомою комою (змінний показник степеня представлятиме собою ступінь десяти, на який множиться мантиса числа)
  2. число з фіксованою комою (знаменник буде встановлений у фіксованому ступені десяти)

Мови програмування, які підтримують раціональний тип даних, зазвичай дозволяють конструювати таке значення з двох цілих чисел, замість числа з плаваючою комою з основою 2, через втрату точності, яку б останнє спричинило. Зазвичай базові арифметичні операції ('+', ' − ', '×', '/', зведення цілих в ступінь ) і порівняння ('=', ' < ', ' > ', '≤') розширюються, щоб діяти на їх — або нативно, або через засоби перевантаження оператора, надані мовою програмування. Ці операції можуть бути переведені компілятором у послідовність цілочисельних машинних інструкцій або у виклики бібліотеки .

Стандартні формати[ред. | ред. код]

IEEE 754 визначає три стандартні типи десяткових даних із плаваючою комою різної точності:

  • Формат числа з плаваючою комою Decimal32
  • Формат числа з плаваючою комою Decimal64
  • Формат числа з плаваючою комою Decimal128

Підтримка мовами програмування[ред. | ред. код]

  • C# має вбудований тип даних "decimal", що складається з 128-біт, що призводить до 28-29 значущих цифр. Він має приблизний діапазон (-7.9 x 10^28 до 7.9 x 10^28) / (10^(0 .. 28)). [1]
  • Починаючи з Python 2.4, стандартна бібліотека Python включає клас Decimal в модулі decimal . [2]
  • Стандартна бібліотека Ruby включає клас BigDecimal в модулі bigdecimal .
  • Стандартна бібліотека Java включає клас java.math.BigDecimal .
  • У мові Objective-C API Cocoa та API GNUstep надають клас NSDecimalNumber і тип даних NSDecimal для представлення десяткових дробів, мантиса яких має довжину до 38 цифр, а експонента становить від -128 до 127.
  • Деякі системи IBM і системи SQL підтримують формат DECFLOAT принаймні з двома більшими форматами. [3]
  • У ABAP новий тип даних DECFLOAT включає формати decimal64 (як DECFLOAT16) і decimal128 (як DECFLOAT34). [4]
  • PL/I оригінально підтримує десяткові дані як з фіксованою, так і з плаваючою комою.
  • Колекція компіляторів GNU (gcc) забезпечує підтримку десяткових чисел з плаваючою точкою як розширення. [5]

Дивись також[ред. | ред. код]

Посилання[ред. | ред. код]

  1. Floating-point numeric types - C# reference.
  2. Decimal — Decimal fixed point and floating point arithmetic — Python 3.10.0 documentation.
  3. Data management. IBM.
  4. How the new ABAP Data Type DECFLOAT helps computing complex calculation? « SAP Ignite. Архів оригіналу за 9 серпня 2012. Процитовано 28 липня 2012.
  5. GCC Manual. 6.13 Decimal Floating Types.