|
|
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Помогите пожалуйста решить проблему. Выполняю обычное вычисление: y = (a ^ x) Mod b И при больших значениях x и b возникает ошибка переполнения (overflow) Все переменные определены как Variant. В чем может быть проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 20:03 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Эээ, дай угадаю... В переполнении! Ты случайно не в миллиардную степень возводишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 20:30 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Да в степень-то число возводиться нормально, а вот после операции mod и происходит переполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 20:35 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Попробуй объявить переменные как double и разбить выражение на две операции. И напиши при каких значениях происходит переполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 20:46 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
1. y = 134 ^ 7 Результат: y=775771085481344 2. y mod 513 Результат: overflow ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 21:01 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
y должно быть integer . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 23:44 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
хм, ничего не помогает. странная вещь. пробовала у integer, тогда он 1 действие не выполняет. double, variant - второе. кто победит? напишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 06:28 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Есть подозрение, что ф-ция MOD не работает с такими большими числами автор1. y = 134 ^ 7 Результат: y=775771085481344 есть предложение заменить на это (вроде работает нормально) Код: plaintext 1. 2. I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 12:39 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
VladConn , integer не может быть больше 32767 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 14:35 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Antonariy, Да, абсолютно. Я имел ввиду Long Integer от -2,147,483,648 до 2,147,483,647 VladConn ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 15:14 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Если быть совсем точным, то положительное значение y должно быть меньше, чем 2147483647.5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 16:03 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
HandKot, Round - это банковское округление. Но здесь это непринципиально - прощес скобочки раскрыть: x - Int(x / y) * y ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 16:06 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Бенедикт, HandKot. Спасибо, ребята, выручили. Всё работает. Сибирь Вас не забудет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 16:44 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Speaker1, "Нет, уж лучше вы - к нам" :) Как прикладной математик, предупреждаю тебя (и не говори, что не слышал), что Int(x / y) может вернуть неожиданный результат в случае вроде бы кратных значений. Утрированно: может оказаться, что Int(15 / 3) = 4 . Почему? Потому что при делении частное оказалось не 5.(0), а (опять утрированно) 4.999999999999998, и, кстати, при отладке стандартными средствами ты этого не увидишь - в десятичном представлении число будет выглядеть как 5, но в двоичном - на единицу в младшем двоичном разряде меньше. Соответственно Int() вернёт 4. Не факт, что ты с этим когда-нибудь столкнёшься, но мне приходилось, и я потерял немало времени на отлов такой ошибки и исправление. Поэтому лучше бы проверить, не получился ли остаток больше делителя. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 18:24 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Точнее, остаток должен быть меньше делителя, в случае неотрицательного делимого и натурального делителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 18:27 |
|
||
|
Переполнение
|
|||
|---|---|---|---|
|
#18+
Бенедикт Спасибо, что предупредил. Но, к счастью, эта ситуация меня не коснется. Дело в том, что конечный ожидаемый результат я проверил и он полностью удовлетворил поставленным условиям. Ведь вычисления с оператором mod это всего лишь маленькая часть крипографического продукта и на эту операцию не делается основного упора. Проще говоря, то что должно работать - то уже работает. Еще раз спасибо. P.S. Не нужно опасаться сибирских краёв. Даже Пушкин наотдыхался здесь вдоволь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34098967&tid=2165035]: |
0ms |
get settings: |
7ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 451ms |

| 0 / 0 |
