Overflow no VB Basic como resolver?

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Overflow no VB Basic como resolver?

Mensagempor jluisfer » Terça Set 18, 2007 11:33

Estou a fazer um programa para testar qual é o maior factor primo de um numero grande,o que acontece é qd faço por exemplo 454546545432 mod 2 da overflow pq segundo me parece o resultado é um nº muito grande.Como é que posso dar a volta a isto?
Core 2 Duo @ 2.4 / 2GB Ram a 667Mhz / 2 X 320GB Sata / Geforce 8800 320 MB / Audigy 2 / Theater Pro 550

http://www.fotodoze.blogspot.com -o meu foto blog
http://acidentesdodesporto.blogspot.com -videos de acidentes de desportos motorizados e não só
jluisfer
Membro de Prata
Membro de Prata
 
Mensagens: 345
Registado: Segunda Fev 02, 2004 10:42
Localização: Lisboa

Mensagempor CoolMaster » Terça Set 18, 2007 11:38

não sei vb, mas não tens um tipo de dados inteiro de 32 (long) ou até 64bits (long long) para aí?
CoolMaster
Membro de Prata
Membro de Prata
 
Mensagens: 137
Registado: Segunda Dez 25, 2006 0:54
Localização: Porto

Mensagempor SkylineGTR » Terça Set 18, 2007 11:46

Código: Seleccionar todos
Dim numero As Int64


Declara uma variavel com 64bits.
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26

Mensagempor jluisfer » Terça Set 18, 2007 13:05

Não existe esse tipo de variaveis no VB6
Core 2 Duo @ 2.4 / 2GB Ram a 667Mhz / 2 X 320GB Sata / Geforce 8800 320 MB / Audigy 2 / Theater Pro 550

http://www.fotodoze.blogspot.com -o meu foto blog
http://acidentesdodesporto.blogspot.com -videos de acidentes de desportos motorizados e não só
jluisfer
Membro de Prata
Membro de Prata
 
Mensagens: 345
Registado: Segunda Fev 02, 2004 10:42
Localização: Lisboa

Mensagempor SkylineGTR » Terça Set 18, 2007 13:41

Pois, o Int64 é um tipo em VB.NET.

Em VB6 tens:

Integer: 16bits - valores entre –32,768 e 32,767
Long: 32bits - valores entre 2,147,483,648 e 2,147,483,647

Em VB6 não tens inteiros a 64bits, tens o Double...
Double: 64bits - valores entre –1.79769313486232E+308 e 1.79769313486232E+308

Senão podes sempre guardar o resultado numa String...
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26

Mensagempor jluisfer » Terça Set 18, 2007 15:41

O problema parece-me que é mesmo quando ele faz a conta,já experimentei definir a variavel como double e nada e ja tb fiz resultado=val("343534343535322") mod 2 e dá à mesma overflow
Core 2 Duo @ 2.4 / 2GB Ram a 667Mhz / 2 X 320GB Sata / Geforce 8800 320 MB / Audigy 2 / Theater Pro 550

http://www.fotodoze.blogspot.com -o meu foto blog
http://acidentesdodesporto.blogspot.com -videos de acidentes de desportos motorizados e não só
jluisfer
Membro de Prata
Membro de Prata
 
Mensagens: 345
Registado: Segunda Fev 02, 2004 10:42
Localização: Lisboa

Mensagempor Fenrir » Quarta Set 19, 2007 9:55

e que tipo de variavel é resultado? Não tens que fazer um cast ?


se resultado for do tipo inteiro

resultado = decimal / mod 2 é capaz de dar estouro, ou valores incorrectos.
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor jluisfer » Quarta Set 19, 2007 14:00

So uso nºs inteiros nessa conta
Core 2 Duo @ 2.4 / 2GB Ram a 667Mhz / 2 X 320GB Sata / Geforce 8800 320 MB / Audigy 2 / Theater Pro 550

http://www.fotodoze.blogspot.com -o meu foto blog
http://acidentesdodesporto.blogspot.com -videos de acidentes de desportos motorizados e não só
jluisfer
Membro de Prata
Membro de Prata
 
Mensagens: 345
Registado: Segunda Fev 02, 2004 10:42
Localização: Lisboa

Mensagempor LMX » Sábado Out 06, 2007 11:34

boas!
não estou a perceber muito bem, mas pelo menos em c e na minha maquina um int são 32 bits e pelo que mostraste ai se tens int de 16 bits é normal que estourem o resultado que la metes é tremendamente maior que o máximo que ele suporta.
Agora...também não sei qual a ordem d grandeza com que queres trabalhar só sei que é grande porque foi o q postas te.
O numero que deste como exemplo cabe muito bem num double sem sombra para duvidas.
atenção que se tiveres por exemplo um int a receber um double esquece.
Desculpa nao poder ajudar. :?

Cumprimentos
De pé mas...Cansado!!!
LMX
Membro de Ouro
Membro de Ouro
 
Mensagens: 786
Registado: Quarta Out 20, 2004 21:16
Localização: Lisboa


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron