![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
IBladeMasterI |
![]()
Сообщение
#1
|
Гость ![]() |
Напишем маленькую программку(Console App)
var I,K: Ineteger; Begin I := 100000; K := round(sqrt( sqr(I) )); WriteLn('k=',K); ReadLn; End; Как вы думаете что будет выведено?Максимальный размер Integer 2147483647 т.е 2*10^10 Будет выведено 37551. Мы думаем что это связано что когда в функцию sqrt поступает Integer там происходит переполнение. Если бы I было типа Real то все нормально. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Мы думаем что это связано что когда в функцию sqrt поступает Integer там происходит переполнение. А ВЫ что хотели? Потеря разрядности, результат - неверный.Двоичное представление 100000*100000 занимает 34 бита, размер Integer = 32 бита: 1001010100000010111110010000000000, то что показано красным - теряется. ИспользуйТЕ более емкие типы: var |
IBladeMasterI |
![]()
Сообщение
#3
|
Гость ![]() |
100000= 10^5
10^5*10^5=10^10, Это <= 32 бит, т.к Integer 2*10^10 занимает 32 бита, но я думаю вы правы, т.к мы и сами так думали. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
![]() ![]() Цитата 100000= 10^5 Это с каких пор? Вообще-то 10^6 |
IBladeMasterI |
![]()
Сообщение
#5
|
Гость ![]() |
Ха, при исполнение вашего кода выдает тотже результат!
Скорее всего для Инт64 в sqrt тот же код что и для Integer.... |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Как ВЫ думаете, прежде чем что-то отвечать, НЕУЖЕЛИ же я не проверил?
![]() Скриншот дать? Или версию СВОЕГО компилятора ВЫ все-таки сообщите? |
IBladeMasterI |
![]()
Сообщение
#7
|
Гость ![]() |
|
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
|
Гость |
![]()
Сообщение
#9
|
Гость ![]() |
10^1=10
10^2=100 10^3=1000 10^4=10000 10^5=100000 Я просто хочу разобраться в этом вопросе |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата нет там переполнения Запусти Windows Calculator, переведи 100000 в Binary и возведи в квадрат (при указании QWORD, разумеется), потом скопируй это в Notepad и ОЧЕНЬ ВНИМАТЕЛЬНО пересчитай биты, это понятно? Придешь, когда закончишь подсчеты... |
Гость |
![]()
Сообщение
#11
|
Гость ![]() |
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата А зачем тогда посоветовали использовать более емкие типы, если это не помагает? Если это не помогает ТЕБЕ, это не значит, что у меня НЕ отработало:Эскизы прикрепленных изображений ![]() |
Гость |
![]()
Сообщение
#13
|
Гость ![]() |
Посчитал, да их там 34 - переполнение
Скрин: так ты делал на паскале, а я console app т.е в Delphi 7. Вопрос: Как решить на Дельфи 7 не прибегая к Real ? |
Lapp |
![]()
Сообщение
#14
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Максимальный размер Integer 2147483647 т.е 2*10^10 Ошибка в подсчете количества знаков. 2 147 483 647 ~ 2*10^9 100000= 10^5 Это с каких пор? Вообще-то 10^6 Хм, volvo, и ты в арифметике иной раз сбоишь.. Скрин: так ты делал на паскале, а я console app т.е в Delphi 7. Вопрос: Как решить на Дельфи 7 не прибегая к Real ? IBladeMasterI, а ты, оказывается, большой любитель вводить собеседников в заблуждение. Если уж ты постишь задачу по Дельфи в раздел по Паскалю - то, может, хотя бы сообщишь это? Кстати, volvo тебя спросил про компилятор в посте №6 - почему ты тогда проигнорировал вопрос, а теперь (в посте №13) указываешь на якобы неточность? Тебе наплевать на время тех, кто отвечает? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
![]()
Сообщение
#15
|
Гость ![]() |
тебя спросил про компилятор в посте №6 - почему ты тогда проигнорировал вопрос, а теперь (в посте №13) указываешь на якобы неточность? Тебе наплевать на время тех, кто отвечает? Ну меня спросили, нужен мне его компилятор, ладно отвечу - нет не надо, спасибо. Мне не наплевать,просто я думал что Object Pascal который входит в данный раздел похож на Дельфи... Вопрос закрыт,Всем спасибо. |
Lapp |
![]()
Сообщение
#16
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Мне не наплевать,просто я думал что Object Pascal который входит в данный раздел похож на Дельфи... Вот и хорошо ![]() Как видишь, казалось бы - мелочи (различия в компиляторах), а ответ на вопрос часто лежит именно в них. Зарегистрируйся и приходи еще для более точных и плодтворных разговоров ![]() Удачи! -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 11:55 |