﻿# Урок 18\. Паттерн 10\. Хранение в double целочисленных значений

Тип double имеет размер 64 бита, и совместим со стандартом IEEE\-754 на 32\-битных и 64\-битных системах\.

_Примечание\. IEEE 754 — широко распространённый стандарт формата представления числа с плавающей запятой, используемый как в программных реализациях арифметических действий, так и во многих аппаратных \(CPU и FPU\) реализациях\. Многие компиляторы языков программирования используют этот стандарт для хранения и выполнения математических операций\._

Некоторые программисты используют тип double для хранения и работы с целочисленными типами:

```cpp
size_t a = size_t(-1);
double b = a;
--a;
--b;
size_t c = b; // x86: a == c
              // x64: a != c
```

Данный пример еще можно пытаться оправдать на 32\-битной системе, так как тип double имеет 52 значащих бита и способен без потерь хранить 32\-битное целое значение\. Но при попытке сохранить в double 64\-битное целое число точное значение может быть потеряно \(см\. рисунок 1\)\.

![18_Pattern_10_Memsize_and_double_ru/image1.png](https://import.viva64.com/docx/blog/18_Pattern_10_Memsize_and_double_ru/image1.png)

_Рисунок 1 \- Количество значащих битов в типах size\_t и double_

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

## Диагностика

Данный паттерн ошибок относится к редко встречающимся на практике\. Тем не менее, редко встречающиеся ошибки не менее опасны\. Анализатор PVS\-Studio предупреждает о потенциально возможной ошибке с помощью диагностического сообщения [V113](https://pvs-studio.ru/ru/docs/warnings/v113/)\. Если необходимо обнаружить явное приведение типов \(от memsize к double и обратно\), то можно включить предупреждение [V203](https://pvs-studio.ru/ru/docs/warnings/v203/)\.

_Авторы курса: Андрей Карпов \([karpov@viva64\.com](mailto:karpov@viva64.com)\), Евгений Рыжков \([evg@viva64\.com](mailto:evg@viva64.com)\)\._

_Правообладателем курса "Уроки разработки 64\-битных приложений на языке Си/Си\+\+" является ООО "Системы программной верификации"\. Компания занимается разработкой программного обеспечения в области анализа исходного кода программ\. [Сайт компании](https://pvs-studio.ru/ru/pvs-studio/)\._