[VB] vermenigvuldigen met "grote" getallen

Pagina: 1
Acties:

  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 25-08 14:17

Millennium

Bug free !!!

Topicstarter
Ik heb het volgende probleem:
code:
1
2
3
4
Dim iets As Double
iets = 2 * 65536 //geeft iets = 131072
iets = 4 * 32768 //geeft ook iets = 131072
iets = 8 * 16384 // geeft "Overflow"

Moet ik in dit geval "iets" als iets anders defineren :?
of is er een andere mogelijkheid waardoor ik de laatse vermenigvuldiging kan uitvoeren :?

Rampen bak 2004


Verwijderd

volgens mij is double wel het grootste dat VB standaard heeft, maar er zijn wel implementaties te vinden, die iets meer aankunnen. Kijk bv. maar een op www.pscode.com :).

Wel heel vreemd trouwens dat ie op de laatste crasht... echt wazig.... want een double kan veeeeeel groter worden dacht ik, probeer anders 's een long.

  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 25-08 14:17

Millennium

Bug free !!!

Topicstarter
Op zaterdag 16 februari 2002 17:25 schreef KoenM het volgende:
volgens mij is double wel het grootste dat VB standaard heeft, maar er zijn wel implementaties te vinden, die iets meer aankunnen. Kijk bv. maar een op www.pscode.com :).
Het vreemde is dat de waarde in alle 3 de gevalllen gelijk is aan 131072, maar dat VB alleen bij de 3e een overflow geeft

Long ging volgens mij al eerder over de zeik, maar ik zal eens kijken.

Rampen bak 2004


Verwijderd

Je moet 1 van de 2 getallen als long opgeven als dat niet vanzelfsprekend is. Het 3e geval zijn beide twee 2byte getallen, dus denkt vb: 2 integers (die zijn in vb6 2bytes), en dan is het resultaat ook 2 bytes. Dat gaat mis.

Je moet dus het tekentje voor 'long' achter bv de 8 zetten. (dus 8& ipv 8). Dan werkt het wel.

oops, ik zie dat de left operand een 'double' is. Beter is dan 8# te schrijven ipv 8, je geeft daarmee aan dat 8 een double is.

Je code moet dus wel correct zijn: als je left operand een double is, moet je niet 2 ints vermenigvuldigen, een impliciete cast is dan nodig.

Verwijderd

Oplossing is simpel:

Uitleg:
If the expression passed to the function is outside the range of the data type being converted to, an error occurs.

In general, you can document your code using the data-type conversion functions to show that the result of some operation should be expressed as a particular data type rather than the default data type.
Snelle code (form met Command button):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CommandButton1_Click()
Dim iets As Double

    iets = 2 * 65536 'Uitkomst is 131072 in Msgbox
    MsgBox (iets)

    iets = 4 * 32768 'Uitkomst is 131072 in Msgbox
    MsgBox (iets)

    iets = CDbl(8) * 16384 'Uitkomst is 131072 in Msgbox
    MsgBox (iets)

End Sub

Magische keyword: CDbl 8-)

  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 25-08 14:17

Millennium

Bug free !!!

Topicstarter
Hier kan ik wat mee, bedankt Otis en Systeemprutser, ik kan weer verder prutsen.

Rampen bak 2004


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 22:15

Sponge

Serious Game Developer

Nog makkelijker (en sneller!) is het type erachter zetten...

Bijv:
Dim myArray(640*480) as Byte
Kan niet.

Maar:
Dim myArray(640& * 480&) as Byte
Werkt wel...
Pagina: 1