[VB/DELPHI] doubles,longs en integers

Pagina: 1
Acties:

  • Zoppie
  • Registratie: December 2000
  • Niet online
Hai,

Ik moet een functie van Delphi naar Vb omzetten.

In Delphi zit echter een leuke bijkomstigheid in de vorm van een overflow.

de functie:
integer0 = (integer1+integer2)*integer3 +integer4

De functie geeft dus op een zeker moment een overflow. Delphi denkt dan dat de eerste bytes overbodig zijn en gooit deze weg.
Als ik dit in vb probeer krijg ik een overflow error (zoals verwacht). Dus heb ik integer0 in een double veranderd. Dit werkt maar ik moet echter alleen de laatste 4 bytes hebben.

Hoe krijg ik nu de laatste 4 bytes van deze double?

(let op ik ben niet de programmeur van de delphi codes, dus graag geen commentaar daarop).

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

* drm weet niets van delphi en vb [/disclaimer]maar denkt het volgende:

is een double niet (net als in de C-familie) een double-precision floating-point getal?
Moet je niet iets van een long integer gebruiken, dan?

Ik zie het verband niet helemaal, nl...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Weet niet helemaal zeker wat je bedoeld hoor, maar dit stukkie VB code geeft wel de laatste 4 cijfers van je getal terug als resultaat. Je kan i.d.d. wel beter een double gaan gebruiken i.p.v. een integer als je getallen te groot worden.

integer0 = CInt(Right(((Integer1+Integer2)*Integer3+Integer4),4))

Hoop je ermee geholpen te hebben. *D

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:51

Creepy

Tactical Espionage Splatterer

waarom een double? en niet een long integer? (In delphi dan.. ik weet (bijna) niks van VB)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Op maandag 19 november 2001 20:02 schreef Creepy het volgende:
waarom een double? en niet een long integer? (In delphi dan.. ik weet (bijna) niks van VB)
In Delphi is een LongInt hetzelfde als een integer (signed 32 bit). Int64 is signed 64 bit.

  • Zoppie
  • Registratie: December 2000
  • Niet online
In vb is er geen longint van 64 bits.

Het gaat er dus om dat ik van een double met bijv. de waarde
FFAA BBCC DDEE de waarde BBCC DDEE in een long kan stoppen. Het gaat dus om de laatste 4 bytes en niet om de laatste 4 getallen.

Wat ik niet begrijp is dat Delphi toestaat dat er waarde groter dan de maximale waarde gestopt wordt en dit dan doodleuk gaat veranderen, zonder dat er een error gegeven wordt. (overflow checking staat uit, maar doe dan niks)

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Als je bij Project->Options->Compiler overflowchecking aanzet zal je waarschijnlijk wel een exception krijgen.

  • Zoppie
  • Registratie: December 2000
  • Niet online
Op dinsdag 20 november 2001 09:31 schreef Elissen het volgende:
Als je bij Project->Options->Compiler overflowchecking aanzet zal je waarschijnlijk wel een exception krijgen.
Ja dat zal best, maar de code in Delphi is er nu eenmaal. Het gaat mij om de vb code om de laatste 4 bytes van een double te lezen.
Pagina: 1