@Mushkiter007

Как мне записать конечный результат деления?

Есть две переменные типа Real X1:=1 и X2:=0.2. Мне нужно чтобы выражение frac(X1/X2) было равно 0. Возможно ли это сделать?
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
В зависимости от того, какого происхождения числа, можно поступать так.

1. Работать с погрешностью. Например.
q := X1 / X2;
if abs(q - Round(q)) < 1e-5 then ...

Я в основном сейчас на «си с крестами» и непривычка не брать условие в скобки :)

2. Работать в рациональных числах.
type
  TRatio = record
    Num, Den : integer;
  end;

Думаю, сами сможете написать операции ±×/ и, если надо, сокращение.

3. Работать в фиксированной запятой — например, перевести рубли в копейки.
var
  X1 : integer = 100;
  X2 : integer = 20;

if X1 mod X2 = 0 then ...


4. Работать в десятичной длинной арифметике. Это уже совсем «большая пушка», и может быть что-то типа
type
  TDecFloat = record
    mantissa : uint64;  // например, от 1e17 до 1e18
    order : integer;
    sign : boolean;
  end;

Примерно так можно сделать калькулятор, работающий в десятичной системе и переводящий в extended и обратно, если, например, нужно взять синус. Погрешность перевода для трансцендентных функций, разумеется, будет, зато 0,2 в такой системе — это точное 0,2, и это важно для калькуляторов: он вычислит в точности то, что человек вычислит ручкой на бумаге.

ВНИМАНИЕ! Для методов 2,3,4 придётся переработать всю цепочку, через которую появляются 1 и 0,2. В float/double нет числа 0,2, и точка.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы