![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ShowMessage |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 14.9.2006 Репутация: нет Всего: нет |
Здраствуйте!)
у меня есть 10 ти значное число и я делаю матиматиские вычисления и оно невлазит число в Int64 к примеру
Как можно сдеать такое вычисление? чтобы результат был нормальным.... Иногда получается норм а иногда когда число невлазит в Int64 и оно даёт мне число с минусом (отрицательное). |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 19 |
ShowMessage, Int64 64-разрядный тип данных, т.е. -2^63..2^63-1, поэтому любое 10-тизначное число туда влезает по-любому. Отрицательное значение может получиться при вычитании, почему нет.
Это сообщение отредактировал(а) Nicholas_S - 20.12.2006, 02:30 -------------------- ...все в мире относительно |
|||
|
||||
| ShowMessage |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 14.9.2006 Репутация: нет Всего: нет |
При вычитании оно по полюбому отрицательным неполучится, всегда получается какое либо число положительное......
|
|||
|
||||
| dimazu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 4.3.2006 Репутация: 4 Всего: 5 |
А что такое ID ?
a:= StrToInt64(b)-((round(StrToInt64(ID)/128))*128); |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 19 |
ShowMessage, это еще почему? Очень даже легко. Запускаем Delphi, встаем курсором на слово Int64 и нажимаем F1. Читаем.
Вопросы? -------------------- ...все в мире относительно |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 5 Всего: 11 |
в любом случае у тебя здесь переполнения не случится если b и ID положительные, скорее всего в b или ID не верные значения, возможно с минусом.
|
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 19 |
люди, видимо, уже не помнят, какой-тип и какой диапазон представляет.
Отрицательное значение вполне может получиться, например, при вычете из 1 - 3 = -2. -------------------- ...все в мире относительно |
|||
|
||||
| ShowMessage |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 14.9.2006 Репутация: нет Всего: нет |
ошибся немного ID это b просто тут я привел в примере как b его а у меня оно ID, короче
a:= StrToInt64(b)-((round(StrToInt64(b)/128))*128); как и говрил деление происходит без остатка поэтому полюбому отрицательным небудет результат... |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 1 Всего: 19 |
ShowMessage, приведи конкретный пример, когда получается не то, что требуется (значение b, результат)
-------------------- ...все в мире относительно |
|||
|
||||
| dimazu |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 4.3.2006 Репутация: 4 Всего: 5 |
В данном случае отрицательное значение ОБЯЗАТЕЛЬНО получится, так работает round. Eсли b=1234567890, то естессно получится отрицательный результат. Т.е. во второй части будет (округленный b/128) * 128, что есть > b. Это не переполнение, а неправильная формула. Почему бы не мудрствуя, сделать так:
Это сообщение отредактировал(а) dimazu - 20.12.2006, 06:11 |
||||
|
|||||
| Winprogrammer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 23.3.2006 Где: ::Россия.РСО-Алан ия.Владикавка Репутация: нет Всего: нет |
Весь прикол вчём, если число не помещается в переменную, оно урезается как-то по хитрому и в начале приписывается минус. Что бы решить вашу проблему нужно подключать длинную арифметику. Полазайте по инету може найдёте чё.
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…----------- Uploading файлов без гемороя - это просто!!! Winprogrammer.ifolder.ru |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
int64 = 20 десятичных цифр!
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| VaiMR |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 25.11.2006 Репутация: нет Всего: 2 |
Полностью согласен. А можно пример работы (b и результат), так как при замене round на div: b=1234567890; round(b/128)=9645061 b div 128=9645062 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |