﻿# V3158\. Suspicious division\. Absolute values of both operands are equal\.

Анализатор обнаружил одну из двух операций с целыми числами \- деление или взятие остатка от деления \- в которой абсолютное значение левого операнда всегда равно значению правого\.

Результаты таких операций:

* для деления результатом будет 1 \(\-1\);
* для взятия остатка от деления результатом будет 0\.

Скорее всего, такое выражение содержит ошибку или является избыточным\.

Рассмотрим пример:

```cpp
const int MinDimensionValue = 42;
const int MaxDimensionValue = 146;

static int GetSidesRatio(int width, int height)
{
  if (width < MinDimensionValue || width > MinDimensionValue)
    throw new ArgumentException(/*....*/);
    
  if (height < MinDimensionValue || height > MinDimensionValue)
    throw new ArgumentException(/*....*/);
  
  return width / height;
}
```

Анализатор предупреждает, что результат выражения 'width / height' всегда будет равен 1\. Действительно, программа дойдет до выполнения операции деления только в том случае, если значение у 'width' будет строго равно 'MinDimensionValue'\. При любых других значениях будет выброшено исключение\. С 'height' ситуация аналогична\. 

В данном фрагменте кода была допущена опечатка, и вместо проверки 'width \> MinDimensionValue' должна быть 'width \> MaxDimensionValue' \(аналогично и с 'height'\)\. Исправленный вариант:

```cpp
const int MinDimensionValue = 42;
const int MaxDimensionValue = 146;

static int GetSidesRatio(int width, int height)
{
  if (width < MinDimensionValue || width > MaxDimensionValue)
    throw new ArgumentException(/*....*/);
    
  if (height < MinDimensionValue || height > MaxDimensionValue)
    throw new ArgumentException(/*....*/);
  
  return width / height;
}
```