Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Некоторые языки программирования (или их компиляторы) предоставляют встроенный (примитивный) или библиотечный десятичный тип данных для представления неповторяющихся десятичных дробей, таких как 0,3 и -1,17, без округления, а также для выполнения с ними арифметических операций. Примерами являются decimal.Decimalтип 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 включает класс Decimal в модуль decimal . [2]
  • Стандартная библиотека Ruby включает класс BigDecimal в модуль bigdecimal
  • Стандартная библиотека Java включает класс java.math.BigDecimal
  • В Objective-C , в какао и GNUStep интерфейсы обеспечивают 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 . Проверено 28 июля 2012 .CS1 maint: заархивированная копия как заголовок ( ссылка )
  5. ^ "Руководство GCC" . 6.13 Десятичные плавающие типы.