Что значит ошибка: "Значение было недопустимо малым или недопустимо большим для Int32"?

Рейтинг: 0Ответов: 1Опубликовано: 17.10.2014

Имеем программу:

var a, b: real;

function dg0(a, b : real) : real;
var
  dg : real;
  f, r : longint;
begin
  r := 1;
  repeat 
    a := a * b;
    f := trunc(a);
    dg := dg + f * r;
  until a - trunc(a) = 0;
  writeln(dg);
  dg0 := dg;
end;
begin
  readln(a, b);
  writeln(dg0(a, b));
  writeln('Нажмите Enter для выхода из программы');
  readln;
end.

Она должна переводить дробную часть десятичного числа а в систему счисления с основанием b (ввод числа в формате 0.111). На 12 строчке (f := trunc(a);) выдает ошибку:

Pattern.pas(12) : Ошибка времени выполнения: Значение было недопустимо малым или недопустимо большим для Int32.

Прошу объяснить, в чем ошибка

Ответы

▲ 1

Вам же написали: Значение было недопустимо малым или недопустимо большим для Int32.

У вас f типа longint это то же, что и Int32. Скорее всего, целая часть a больше, чем может поместиться в Int32 (-2147483648..2147483647 или -2^31..2^31-1). Строчкой выше вы умножаете a на b.