Десятичный тип данных - Decimal data type

Немного языки программирования (или компиляторы для них) предоставляют встроенную (примитивную) или библиотеку десятичный тип данных представлять неповторяющиеся десятичные дроби например, 0,3 и -1,17 без округления, и делать с ними арифметические операции. Примерами являются десятичный. десятичный тип Python, и аналогичные типы, предоставляемые другими языками.

Обоснование

Дробные числа поддерживаются на большинстве языков программирования как числа с плавающей запятой или же числа с фиксированной точкой. Однако такие представления обычно ограничивают знаменатель степенью двойки. Большинство десятичных дробей (или большинство дробей в целом) не могут быть представлены точно как дроби со знаминателем, равным степени двойки. Например, простая десятичная дробь 0,3 (3/10) может быть представлена ​​как 5404319552844595/18014398509481984 (0,299999999999999988897769 ...). Эта неточность вызывает множество проблем, которые знакомы опытным программистам. Например, выражение 0.1 * 7 == 0.7 может парадоксально оценить как ложь в некоторых системах из-за неточности представления десятичных знаков.

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

Десятичный тип данных может быть реализован как число с плавающей запятой или как число с фиксированной точкой. В случае с фиксированной точкой знаменатель будет установлен в фиксированную степень десяти. В случае с плавающей запятой переменная экспонента будет представлять степень десяти, на которую умножается мантисса числа.

Языки, поддерживающие рациональный тип данных, обычно позволяют построить такое значение из двух целых чисел вместо числа с плавающей запятой с основанием 2 из-за потери точности, которую последнее может вызвать. Обычно основные арифметические операции ('+', '-', '×', '/', целое число полномочия ) и сравнения ('=', '<', '>', '≤') будут расширены, чтобы действовать на них - либо изначально, либо через перегрузка оператора возможности, предоставляемые языком. Эти операции могут быть переведены компилятор в последовательность целых чисел машинные инструкции, или в библиотека звонки. Поддержка также может распространяться на другие операции, такие как форматирование, округление до целого числа или плавающая точка значение и т. д. Примером этого является 123,456

Стандартные форматы

IEEE 754 определяет три стандартных типа десятичных данных с плавающей запятой разной точности:

Языковая поддержка

  • C # имеет встроенный тип данных «десятичный», состоящий из 128-битных, что дает 28–29 значащих цифр. Он имеет приблизительный диапазон (от -7,9 x 10 ^ 28 до 7,9 x 10 ^ 28) / (10 ^ (от 0 до 28)). [1]
  • Начиная с Python 2.4, Python стандартная библиотека включает Десятичный класс в модуле десятичный.[2]
  • Рубин стандартная библиотека включает BigDecimal класс в модуле bigdecimal
  • Ява стандартная библиотека включает java.math.BigDecimal учебный класс
  • В Цель-C, то Какао и GNUstep API предоставляют NSDecimalNumber класс и NSDecimal Тип данных C для представления десятичных знаков, мантисса которых составляет до 38 цифр, а показатель степени составляет от -128 до 127.
  • Некоторые системы IBM и SQL поддерживают формат DECFLOAT как минимум с двумя большими форматами.[3]
  • Новый тип данных ABAP DECFLOAT включает форматы decimal64 (как DECFLOAT16) и decimal128 (как DECFLOAT34).[4]
  • PL / I изначально поддерживает десятичные данные с фиксированной и плавающей запятой.
  • Коллекция компиляторов GNU (также известный как gcc) предоставляет поддержку десятичных чисел с плавающей запятой как расширение[5]

Рекомендации

  1. ^ http://msdn.microsoft.com/en-us/library/364x0z75.aspx
  2. ^ https://docs.python.org/library/decimal.html
  3. ^ http://www.ibm.com/developerworks/data/library/techarticle/dm-0801chainani/
  4. ^ «Архивная копия». Архивировано из оригинал на 2012-08-09. Получено 2012-07-28.CS1 maint: заархивированная копия как заголовок (связь)
  5. ^ "Руководство GCC". 6.13 Десятичные плавающие типы.