Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Ошибка возведения числа в квадрат   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
14-1132583518
ArtemESC
2005-11-21 17:31
2005.12.11
Как програмно выключить или перезагрузить компьютер?


14-1132341956
Separator
2005-11-18 22:25
2005.12.11
Firewall


2-1132602966
Антоха
2005-11-21 22:56
2005.12.11
Наипростешая програмка


2-1132571683
Андрей111
2005-11-21 14:14
2005.12.11
Перехват изменения состояния окна!


14-1132302901
Rentgen
2005-11-18 11:35
2005.12.11
Д.Р. на работе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский