IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
Closed Topic Открыть новую тему 
> Sqrt Function, Интересный факт
сообщение
Сообщение #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 то все нормально.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Мы думаем что это связано что когда в функцию sqrt поступает Integer там происходит переполнение.
А ВЫ что хотели? Потеря разрядности, результат - неверный.

Двоичное представление 100000*100000 занимает 34 бита, размер Integer = 32 бита:
1001010100000010111110010000000000, то что показано красным - теряется.

ИспользуйТЕ более емкие типы:
var
k, i64: int64;
Begin
i64 := 100000;
K := round(sqrt( sqr(I64) ));
WriteLn('k=',K);
ReadLn;
End.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






100000= 10^5
10^5*10^5=10^10, Это <= 32 бит, т.к Integer 2*10^10 занимает 32 бита, но я думаю вы правы, т.к мы и сами так думали.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






blink.gif blink.gif
Цитата
100000= 10^5


Это с каких пор? Вообще-то 10^6
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Ха, при исполнение вашего кода выдает тотже результат!
Скорее всего для Инт64 в sqrt тот же код что и для Integer....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Как ВЫ думаете, прежде чем что-то отвечать, НЕУЖЕЛИ же я не проверил? mad.gif

Скриншот дать? Или версию СВОЕГО компилятора ВЫ все-таки сообщите?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(IBladeMasterI @ 4.10.2006 19:21) *

100000= 10^5
10^5*10^5=10^10, Это <= 32 бит, т.к Integer 2*10^10 занимает 32 бита, но я думаю вы правы, т.к мы и сами так думали.

Уважаемый, это 10^5 можете проверить где угодно, поэтому нет там переполнения
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата(IBladeMasterI @ 4.10.2006 19:23) *

Ха, при исполнение вашего кода выдает тотже результат!
Скорее всего для Инт64 в sqrt тот же код что и для Integer....

А зачем тогда посоветовали использовать более емкие типы, если это не помагает?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






10^1=10
10^2=100
10^3=1000
10^4=10000
10^5=100000
Я просто хочу разобраться в этом вопросе
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
нет там переполнения

Запусти Windows Calculator, переведи 100000 в Binary и возведи в квадрат (при указании QWORD, разумеется), потом скопируй это в Notepad и ОЧЕНЬ ВНИМАТЕЛЬНО пересчитай биты, это понятно?

Придешь, когда закончишь подсчеты...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата(IBladeMasterI @ 4.10.2006 19:23) *

Ха, при исполнение вашего кода выдает тотже результат!
Скорее всего для Инт64 в sqrt тот же код что и для Integer....

Так у вас все ок?
1) Проверял на разных (на 2х) одна фигня
2) И все-таки в чем же там загвоздка?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
А зачем тогда посоветовали использовать более емкие типы, если это не помагает?
Если это не помогает ТЕБЕ, это не значит, что у меня НЕ отработало:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Посчитал, да их там 34 - переполнение
Скрин: так ты делал на паскале, а я console app т.е в Delphi 7.
Вопрос: Как решить на Дельфи 7 не прибегая к Real ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(IBladeMasterI @ 4.10.2006 19:20) *

Максимальный размер Integer 2147483647 т.е 2*10^10

Ошибка в подсчете количества знаков.
2 147 483 647 ~ 2*10^9

Цитата(volvo @ 4.10.2006 20:23) *

100000= 10^5
Это с каких пор? Вообще-то 10^6

Хм, volvo, и ты в арифметике иной раз сбоишь..

Цитата(Гость @ 4.10.2006 20:40) *

Скрин: так ты делал на паскале, а я console app т.е в Delphi 7.
Вопрос: Как решить на Дельфи 7 не прибегая к Real ?

IBladeMasterI, а ты, оказывается, большой любитель вводить собеседников в заблуждение. Если уж ты постишь задачу по Дельфи в раздел по Паскалю - то, может, хотя бы сообщишь это? Кстати, volvo тебя спросил про компилятор в посте №6 - почему ты тогда проигнорировал вопрос, а теперь (в посте №13) указываешь на якобы неточность? Тебе наплевать на время тех, кто отвечает?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата(lapp @ 5.10.2006 5:46) *

тебя спросил про компилятор в посте №6 - почему ты тогда проигнорировал вопрос, а теперь (в посте №13) указываешь на якобы неточность? Тебе наплевать на время тех, кто отвечает?

Ну меня спросили, нужен мне его компилятор, ладно отвечу - нет не надо, спасибо.
Мне не наплевать,просто я думал что Object Pascal который входит в данный раздел похож на Дельфи...
Вопрос закрыт,Всем спасибо.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Гость @ 5.10.2006 8:14) *

Мне не наплевать,просто я думал что Object Pascal который входит в данный раздел похож на Дельфи...

Вот и хорошо smile.gif
Как видишь, казалось бы - мелочи (различия в компиляторах), а ответ на вопрос часто лежит именно в них.
Зарегистрируйся и приходи еще для более точных и плодтворных разговоров smile.gif
Удачи!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.09.2017 7:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"