Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.04 c
1-1131694544
Deka
2005-11-11 10:35
2005.12.11
Оптимизация под конкретный процессор в Дельфи...


14-1132637157
DelphiN!
2005-11-22 08:25
2005.12.11
Отоброжение смежных ячеек


3-1130481790
surkis
2005-10-28 10:43
2005.12.11
имя SQL Servera


2-1132666961
DelphiLexx
2005-11-22 16:42
2005.12.11
Что такое TrueType шрифты


4-1128500582
Woolen
2005-10-05 12:23
2005.12.11
Запомнить параметры формы