Мови програмування (або компілятори для них) частіше за все надають вбудований (примітивний) або бібліотечний десятковий тип даних для представлення неповторюваних десяткових дробів, таких як 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.