Число́ двойно́й то́чности (Double precision, Double) — компьютерный формат представления числа с плавающей запятой, занимающий в памяти 64 бита, или 8 байт. Как правило, обозначает числа с плавающей запятой стандарта IEEE 754.
Числа с плавающей запятой (двойной/одинарной/четверной точности) поддерживаются сопроцессором (до 80486SX включительно выполнен как отдельный модуль — 0х87/0х287/0х387/0х487, начиная с 80486DX является встроенным в главный процессор. Сопроцессор, хотя он сейчас и является частью главного процессора, принято называть FPU — Floating Point Unit, буквально «модуль плавающей запятой»). В компьютерах, которые имеют 64-разрядные числа с плавающей запятой, большинство чисел хранятся в двойной точности, поскольку использование чисел одинарной точности обеспечивает почти такую же производительность, но все вычисления в FPU осуществляются в 80-битном (расширенном, extended) представлении.
Одним из первых языков программирования, позволявшим использовать числа одинарной и двойной точности с плавающей запятой, был Фортран.
Числа двойной точности с плавающей запятой эквивалентны по точности числу с 15-17 значащими десятичными цифрами (в среднем 16,3) в диапазоне примерно от 10−308 до 10308.
Знак(11 бит)Порядок(52 бита)Мантисса63565548474039323124231615870
Окончательное значение числа равняется ±знак · (1+мантисса/ 252) × 2порядок − 1023. Знак 0 соответствует положительным числам, знак 1 отрицательным. Старший бит мантиссы, который всегда равен единице, опускается. Порядок 0 записывается как 1023.
Существуют также денормализованные числа, записываемые порядком 00…00 и имеющие значение ±знак × (0+мантисса/ 252) · 21 − 1023. Денормализованные числа имеют уменьшенное количество значащих цифр мантиссы. Порядок 11…11 предназначен для записи особых чисел: «бесконечности» и «не-числа» — NaN.
Примеры чисел двойной точности = 1 ≈ 1,0000000000000002 (наименьшее число, большее 1) ≈ 1,0000000000000004 = 2 = −2
= 2-1022-52 ≈ 4,9406564584124654×10−324 (минимальное денормализованное положительное число двойной точности) = 2-1022- 2-1022-52 ≈ 2,2250738585072009×10−308 (максимальное денормализованное положительное число двойной точности) = 2-1022 ≈ 2,2250738585072014×10−308 (минимальное нормализованное положительное число двойной точности) = (1 + (1 — 2-52))×21023 ≈ 1,7976931348623157×10308 (максимальное число двойной точности)
= 0 = −0
= Infinity = −Infinity = NaN
≈ 1/3
Реализации Числа двойной точности реализованы во многих языках программирования различными способами. На процессорах, поддерживающих только динамическую точность, таких как x86 без SSE2 (или когда SSE2 не используется в целях совместимости), и использующих по умолчанию расширенную точность, программное обеспечение может испытывать трудности с выполнением некоторых требований.
C и C++ C и C++ предоставляют широкий набор арифметических типов данных. Поддержка двойной точности не является обязательной по стандарту (за исключением необязательного приложения F стандарта C99, посвящённого арифметике IEEE 754), однако на большинстве систем тип double соответствует формату двойной точности. Тем не менее, на 32-битных системах x86 с расширенной точностью по умолчанию некоторые компиляторы могут не соответствовать стандарту C, либо вычисления могут страдать от эффекта двойного округления.
Фортран Фортран предоставляет несколько целочисленных типов и типов вещественных чисел. 64-битный тип real64, доступный через встроенный модуль Fortran iso_fortran_env, соответствует двойной точности.
Common Lisp Common Lisp предоставляет типы SHORT-FLOAT, SINGLE-FLOAT, DOUBLE-FLOAT и LONG-FLOAT. Большинство реализаций поддерживают SINGLE-FLOAT и DOUBLE-FLOAT, тогда как остальные типы являются соответствующими синонимами. Common Lisp предоставляет исключения для обработки потери значимости при слишком малых значениях (underflow), переполнения (overflow) и неточных операций с плавающей точкой в соответствии со стандартом IEEE 754. Бесконечности и значения NaN не описаны в стандарте ANSI, однако многие реализации поддерживают их в качестве расширений.
Java В Java до версии 1.2 каждая реализация должна была полностью соответствовать IEEE 754. Версия 1.2 разрешила реализациям использовать дополнительную точность в промежуточных вычислениях на платформах вроде x87. Поэтому был введён модификатор , обеспечивающий строгое соблюдение вычислений по IEEE 754. Режим строгих вычислений с плавающей точкой был вновь сделан обязательным в Java 17.
JavaScript Согласно стандарту ECMAScript, вся арифметика в JavaScript должна выполняться с использованием чисел с плавающей точкой двойной точности .
JSON Формат данных JSON поддерживает числовые значения и не накладывает ограничений на их точность или диапазон. Однако рекомендует учитывать, что числа формата IEEE 754 binary64 широко распространены, поэтому реализации обработки JSON смогут обеспечить хорошую совместимость, если не будут ожидать большей точности или диапазона, чем предоставляет binary64RFC 8259: STD 90: The JavaScript Object Notation (JSON) Data Interchange Format.
Rust и Zig В языках Rust и Zig имеется тип данных f64.
См. также Числа с плавающей запятой Число половинной точности Число одинарной точности Число четверной точности Число восьмерной точности
Примечания
Ссылки Онлайн преобразователь для IEEE 754 чисел с двойной точностью Зубков С. В. Ассемблер. 2.4.1. Типы данных FPU
Категория:Арифметика с плавающей запятой