﻿# V113\. Implicit type conversion from memsize to double type or vice versa\.


> Это правило входит в группу "Диагностика 64\\\-битных ошибок"\\\. Разработка правил этой группы больше не ведётся, и в будущем они могут быть отключены\\\. Если вы используете эти правила, \[свяжитесь с нашей поддержкой\]\(https://pvs\-studio\.ru/ru/about\-feedback/\) — мы поможем найти замену или предложим альтернативное решение\\\.

Анализатор обнаружил потенциально возможную ошибку, связанную с неявным преобразованием memsize типа в тип 'double' или наоборот\. Потенциальная ошибка может заключаться в невозможности хранения всего диапазона значений memsize типа в переменных типа 'double'\. 

Рассмотрим пример\.

```cpp
SIZE_T size = SIZE_MAX;
double tmp = size;
size = tmp; // x86: size == SIZE_MAX
            // x64: size != SIZE_MAX
```

Тип 'double' имеет размер 64\-бита, и совместим со стандартом IEEE\-754 на 32\-битных и 64\-битных системах\. Некоторые программисты используют тип 'double' для хранения и работы с целочисленными типами\.

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

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

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

Дополнительные материалы по данной теме:

1. 64\-битные уроки\. Урок 18\. Паттерн 10\. [Хранение в double целочисленных значений](https://pvs-studio.ru/ru/blog/lessons/0018/)\.