Умножение

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Умножение

Сообщение Demonx » 06.11.2005 (Вс) 13:55

Почему код
Код: Выделить всё
MsgBox 204 * 255
выдаёт ошибку Overflow?
Изображение

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Re: Умножение

Сообщение Boss IT » 06.11.2005 (Вс) 14:10

Demonx писал(а):Почему код
Код: Выделить всё
MsgBox 204 * 255
выдаёт ошибку Overflow?


Большие числа.... Переполнение памяти.

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 06.11.2005 (Вс) 14:15

52020 это большое число? хочешь сказать что никак нельзя умножить?
Изображение

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 06.11.2005 (Вс) 14:17

Странно, но почему-то этот код
Код: Выделить всё
Dim a As Long
For i = 1 To 255
a = a + 204
Next i
MsgBox a

работает!
Изображение

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 06.11.2005 (Вс) 14:19

Потому что VB подбирает тип к наиболее близкий тип к числовым константам. В даном случае это байт. А поскольку 204 * 255 > 255 то происходит переполнение.
MsgBox 204 * 255&

:roll:
الفيجوال بيسك الرابح

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 06.11.2005 (Вс) 14:21

Теперь понятно, спасибо!
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.11.2005 (Вс) 14:29

GM писал(а):Потому что VB подбирает тип к наиболее близкий тип к числовым константам. В даном случае это байт. А поскольку 204 * 255 > 255 то происходит переполнение.
MsgBox 204 * 255&

:roll:

Неправда. В данном случае это Integer.
А поскольку 204 * 255 > 32767, то происходит переполнение.
Изображение

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 11.11.2005 (Пт) 17:06

MsgBox Str$(CLng(204*255))
На это не смотрите! Это не подпись!!!!!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.11.2005 (Пт) 17:14

Alexander N. Samarin
Ты этот код проверял?
А таки проверь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 11.11.2005 (Пт) 17:29

Упс... :oops: Overflow... :shock: Даже с CDbl... :twisted: Мне плохо.... :drunken: :puker: :shaking2:
На это не смотрите! Это не подпись!!!!!!

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 11.11.2005 (Пт) 18:47

tyomitch писал(а):
GM писал(а):Потому что VB подбирает тип к наиболее близкий тип к числовым константам. В даном случае это байт. А поскольку 204 * 255 > 255 то происходит переполнение.
MsgBox 204 * 255&

:roll:

Неправда. В данном случае это Integer.
А поскольку 204 * 255 > 32767, то происходит переполнение.

Сорри, ошибся :oops:
الفيجوال بيسك الرابح

ZePHyR
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 19.06.2005 (Вс) 18:22
Откуда: Киров

Сообщение ZePHyR » 12.11.2005 (Сб) 21:07

:lol: 8) msgbox(clng(204)*255)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2005 (Сб) 22:18

ZePHyR, :ncool:
Изображение

Krioss McKill'em
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 09.05.2006 (Вт) 2:06

Сообщение Krioss McKill'em » 11.05.2006 (Чт) 9:57

Код: Выделить всё
Dim a(99), b, i, j As Single
Dim N As Byte
Dim f As Single

Private Sub Command1_Click()
List1.Clear
N = Val(Text1.Text)
For i = 3 To N
a(i) = i
f = (2 ^ (a(i) - 1) - 1) Mod a(i)
If f = 0 Then List1.AddItem a(i)
Next
End Sub

Overflow! в строке с f
** причём только с N начиная 34

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2006 (Чт) 10:24

Оператор Mod пытается пеобразовать операнды к типу Long. Первый операнд в эотм случае будет равен 8589934591, что заведомо больше 2147483647... И кстати проблема вылезает не при N = 34, а на шаг раньше, при N = 33

З.Ы.
1. Надо объявлять переменные указывая их тип (у тебя Variant почти везде).
2. Зачем тебе вообще массив в этом коде?
3. Преобразования типов и спецификаторы типов рулят (CLng, CDbl... &,#...)

З.Ы.Ы. И на кой понадобилось заниматься некрофилией?
Последний раз редактировалось Viper 11.05.2006 (Чт) 11:01, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 11.05.2006 (Чт) 10:41

Код: Выделить всё
  Dim l As Long
  l = 204
  l = l * 255
  MsgBox l


О!
Код: Выделить всё
MsgBox 204& * 255&

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2006 (Чт) 10:44

2 Nicky, а к чему твой код?
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 11.05.2006 (Чт) 10:52

Мой по теме. По теме. Той, что наверху.

Krioss McKill'em
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 09.05.2006 (Вт) 2:06

Сообщение Krioss McKill'em » 11.05.2006 (Чт) 11:06

"Задача 1. Среди простых чисел, не превосходящих заданного натурального числа N, найти такое, запись которого в двоичной системе счисления содержит максимальное число единиц. Если таких чисел несколько, найти минимальное число."
Вот и вся некрофилия...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2006 (Чт) 11:13

Посмотри на дату создания топика. Самая натуральная некрофилия.
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 11.05.2006 (Чт) 11:19

:shock:
Я еще подумал: "Вроде новая тема, а нифига уже напостили..."

Krioss McKill'em
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 09.05.2006 (Вт) 2:06

Сообщение Krioss McKill'em » 11.05.2006 (Чт) 17:16

А я просто что-то искал в яндексе, вышел на эту тему, вот тут и сделал, чтоб новую не создавать.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.05.2006 (Чт) 22:54

Я что-то искал в форуме, сюда вообще случайно зашел. Закрою на всякий случай прямо сейчас, а то возвращаться - плохая примета.

Krioss McKill'em, не ленись, создай новый топик :)
Только не тут, а в VB для новичков.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 124

    TopList  
cron