Руководство разработчика

Установка точности сравнения

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

Точность сравнения чисел вещественного типа задается количеством десятичных знаков в диапазоне от 0 до 12. Сравнение вещественных чисел с указанной точностью происходит путем сравнения округленных значений. Как правило точность сравнения используется в методах и функциях.

Синтаксис:

ТОЧНОСТЬ(<целочисленное выражение>)

Целочисленное выражение задает значение точности. Например, значение точности установим равное 2, то есть сравнение будет происходить до второго округленного значения знака после запятой.

Пример:

ВЫЧИСЛИТЬ
  ПЕРЕМ ч = 0.51
  ПЕРЕМ ч1 = 0.511
  ПЕРЕМ ч2 = 0.51888
  ТОЧНОСТЬ(2)
  ОТЛАДКА(ч = ч1) //true
  ОТЛАДКА(ч < ч2) //true т.к. 0.51 < 0.52     
КОНЕЦ

Второй вариант синтаксиса позволяет получить предыдущее значение точности, которое принимает целочисленная переменная.

Синтаксис:

ТОЧНОСТЬ(<целочисленное выражение>, <целочисленная переменная>)
ВЫЧИСЛИТЬ
  ПЕРЕМ ч = 0.51
  ПЕРЕМ ч1 = 0.511
  ПЕРЕМ ЦЕЛОЕ: сохр_точность
  ТОЧНОСТЬ(2) 
  ОТЛАДКА(ч = ч1) //true
  ТОЧНОСТЬ(3, сохр_точность) 
  ОТЛАДКА(ч = ч1)  //false
  ТОЧНОСТЬ(сохр_точность) 
  ОТЛАДКА(ч = ч1) //true
КОНЕЦ

См. также: