|
|
#1
|
|||
|
|||
Ошибка sqr
Столкнулся с такой ошибкой оператора sqr:
Код:
procedure TForm1.Button1Click(Sender: TObject); var a, b, c:integer; begin a:=strtoint(edit1.Text); b:=strtoint(edit2.Text); c:=sqr(a-b); label1.Caption:=inttostr(c); end; Если одно из чисел больше 46340, то начинает выдавать не квадрат, а рандом какой-то. Например, на 48913 выдает -1902485727. С чем такое может быть связано? |
#2
|
||||
|
||||
Слишком большое число. Результат возведения 48913^2 будет больше, чем можно поместить в целый тип. Можно так:
Код:
uses ... Math; ... procedure TForm1.Button1Click(Sender: TObject); var z: extended; begin z:=power(48913, 2); showmessage(floattostr(z)); end; Помогаю за Спасибо |
#3
|
||||
|
||||
Можно еще написать умножение для длинночисленной арифметики - забить число по байтам в массив и умножать массивы "столбиком". Тогда длина фактически не ограничена.
jmp $ ; Happy End! The Cake Is A Lie. |