Это может сработать, если ваше наибольшее число меньше 10 миллиардов, и вы используете двойную точность C ++.
if ( ceil(10000*(x + 0.00001)) > ceil(100000*(x - 0.00001))) {
x = ceil(10000*(x + 0.00004)) / 10000;
}
Это должно позволить отключить как минимум последнюю цифру +/- 9. IЯ предполагаю, что деление на 1000 всегда будет просто сдвинуть десятичное место.Если нет, то, возможно, это можно сделать в двоичном формате.
Вам придется применять его после каждой операции, которая не является +, -, * или сравнением.Например, вы не можете сделать два деления в одной формуле, потому что вам придется применять их к каждому делению.
Если это не сработает, вы можете работать в целых числах, увеличивая числа ивсегда используйте целочисленное деление.Если вам нужны расширенные функции, возможно, есть пакет, который выполняет детерминированную целочисленную математику.Целочисленное деление требуется во многих финансовых условиях из-за ошибки округления, которая может быть использована, как в фильме «Офис».