Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизОшибка возведения числа в квадрат Найти похожие ветки
← →
Nikos (2005-11-12 18:43) [0]Есть переменная типа Integer. Значение этой переменной нужно возвести в квадрат, или умножить два таких значения, то есть
var x1: Integer;
x2: Extended;
begin
x1:= StrToInt(Edit1.Text);
X2:= int(sqr(x1)/1000);
Label1.Caption:= FloatToStr(X2);
end;
Так вот, при введении числа в поле Edit1 более 46000 умножение происходит не корректно, и а именно, результат получается неверным.
Не подскажите, почему это происходит?
← →
lookin © (2005-11-12 18:58) [1](46000)^2 вылазит за пределы типа integer
← →
stef © (2005-11-12 19:08) [2]
function Sqr(X: Integer): Integer;
Есть правда и другая функция
function Sqr(X: Extended): Extended;
Так как у тебя из-за указанного параметра вызывается первый вариант функции получается:
> lookin © (12.11.05 18:58) [1]
← →
begin...end © (2005-11-12 19:13) [3](46000)^2 не вылазит за пределы типа integer.
← →
lookin © (2005-11-12 19:31) [4](46000)^2 = 2116000000
Integer –2147483648..2147483647 - точно не влазит
← →
lookin © (2005-11-12 19:31) [5][3] begin...end © (12.11.05 19
А почему же тогда?
← →
Zeqfreed © (2005-11-12 19:40) [6]lookin © (12.11.05 19:31) [4]
2147483647-(46000)^2 = 31483647
Ку?
sqrt(2147483647) = 46340,950001052
← →
lookin © (2005-11-12 19:41) [7][6] Zeqfreed © (12.11.05 19:40)
Я так и сказал - точно не влазит... Может меня неправильно понял ты? ))
← →
Lamer@fools.ua © (2005-11-12 19:42) [8]>> all
>при введении числа в поле Edit1 более 46000
← →
lookin © (2005-11-12 19:48) [9][8] Lamer@fools.ua © (12.11.05 19:42)
(46001)^2 = 2116092001 что все-таки не больше 2147483647
← →
Lamer@fools.ua © (2005-11-13 12:58) [10]>>lookin © (12.11.05 19:48) [9]
Автор не уточнил, какое именно число, большее 46000, он имел в виду. И зря.
← →
Anatoly Podgoretsky © (2005-11-13 13:27) [11]Зато 46341 и выше не входит.
← →
Anatoly Podgoretsky © (2005-11-13 13:29) [12]И еще у него наверняка выключена проверка диапазонов и переполнения, то ли по причине неграмотности, то ли по причине самоуверенности.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.039 c