Jump to content

Десятичный тип данных

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

Обоснование

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

См. также

[ редактировать ]
  1. ^ «Числовые типы с плавающей запятой — справочник по C#» .
  2. ^ «Десятичное число — десятичная арифметика с фиксированной запятой и плавающей запятой — документация Python 3.10.0» .
  3. ^ «Управление данными» . ИБМ .
  4. ^ «Как новый тип данных ABAP DECFLOAT помогает выполнять сложные вычисления? «SAP Ignite» . Архивировано из оригинала 9 августа 2012 г. Проверено 28 июля 2012 г.
  5. ^ «Руководство GCC» . 6.13. Десятичные типы с плавающей запятой.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: caa7eae19119bfcfc5c88c089f125920__1720359480
URL1:https://arc.ask3.ru/arc/aa/ca/20/caa7eae19119bfcfc5c88c089f125920.html
Заголовок, (Title) документа по адресу, URL1:
Decimal data type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)