VB - Delphi (Variables)

29/06/2003 - 11:09 por Federico Hernández Arce | Informe spam
Buenas Grupo.

Tengo una pequeña (pequeña?) consulta sobre el tema de referencia.

***************
Observaciones
Si alguno programo para el Flight Simulator 2002 mejor, pero sino, es lo
mismo
***************

1. Tengo una app hecha en delphi (no por mí) que puede enviar (escribir) en
el simulador y lo hace correctamente
2. Tengo mi app hecha en VB que supuestamente haría lo mismo, PERO NO LO
HACE

Sucede que la variable en cuestión es Word (según el delphi)
La app le manda un valor (16384) que luego de un cálculo lo transforma en
90º (x * 360 / 65536) y el simulador, correctamente muestra 90º

Ahora viene lo mío
**************
Hago lo mismo, exactamente lo mismo
defino la variable como long y le hago el cálculo que he dicho, y verifico
en un label que el cálculo de 16384 pero en realidad el simulador apunta a
76º (que en valor sería 13873) (tal valor lo verifico en la app de delphi)
como verán, existe un gap entre lo que quería hacer y lo que realmente paso

estimo que es un problema de variables y sus definiciones, pero no me hago
la idea de que podría ser

alguna sugerencia
necesitan más info para tirarme una cuerda?

desde ya les estoy muy agradecido

salu2.

Preguntas similare

Leer las respuestas

#1 pepito
30/06/2003 - 14:38 | Informe spam
Ocurre que al definir la variable como Word, estás obviando el signo y
ganando un bit más, por lo que la cantidad que estás metiendo en la variable
es "legal". Para sacar este tipo de cuentas puedes recurrir a algún
mecanismo para no desbordar las variables enteras que te ofrece VB. Si no
quieres usar variables de punto flotante, puedes usar variables de tipo
Currency, que se almacenan en BCD y no en formato mantisa+exponente, por lo
que no pierdes precisión.

Este es un problema que tiene VB al no ofrecer tipos de datos enteros no
signados, pero en fin de cuentas tampoco es como para volverse locos,
siempre hay opciones. Prueba cambiando los tipos de datos y me comentas...

Salu2



"Federico Hernández Arce" <federicoha@(remove)hotmail.com> escribió en el
mensaje news:
Buenas Grupo.

Tengo una pequeña (pequeña?) consulta sobre el tema de referencia.

***************
Observaciones
Si alguno programo para el Flight Simulator 2002 mejor, pero sino, es lo
mismo
***************

1. Tengo una app hecha en delphi (no por mí) que puede enviar (escribir)


en
el simulador y lo hace correctamente
2. Tengo mi app hecha en VB que supuestamente haría lo mismo, PERO NO LO
HACE

Sucede que la variable en cuestión es Word (según el delphi)
La app le manda un valor (16384) que luego de un cálculo lo transforma en
90º (x * 360 / 65536) y el simulador, correctamente muestra 90º

Ahora viene lo mío
**************
Hago lo mismo, exactamente lo mismo
defino la variable como long y le hago el cálculo que he dicho, y verifico
en un label que el cálculo de 16384 pero en realidad el simulador apunta a
76º (que en valor sería 13873) (tal valor lo verifico en la app de delphi)
como verán, existe un gap entre lo que quería hacer y lo que realmente


paso

estimo que es un problema de variables y sus definiciones, pero no me hago
la idea de que podría ser

alguna sugerencia
necesitan más info para tirarme una cuerda?

desde ya les estoy muy agradecido

salu2.


Respuesta Responder a este mensaje
#2 Federico Hernández Arce
30/06/2003 - 15:33 | Informe spam
sabes que algo de eso era
me hiciste acordar, en algún momento alguíen me paso ésto, que en realidad
es algo de lo que hablas vos

****************************
in C
0xD8C3AC45 = 3636702277 (unsignedint)
3636702277*360/(65536*65536) = 304.82486349530518054962158203

in VB
&HD8C3AC45 = -658265019
CDec(&HD8C3AC45) * 360 / &H10000 ^ 2 = -55.1751365046948
because vb have no unsigned data type, so you need do like this
(CDec(&HD8C3&) * &H10000 + &HAC45&) * 360 / &H10000 ^ 2 = 304.824863495305
****************************


si bien no es específicamente lo que preguntaba, la idea esta por esos lados
y la función que me paso es esta

****************************
Function UnsignedLong(ByVal SignedLong As Long) As Double
Const DBL_UNSIGNED_BIT31 = 2147483648# '&H80000000
If SignedLong >= 0 Then
UnsignedLong = SignedLong
Else
UnsignedLong = DBL_UNSIGNED_BIT31 + (SignedLong And &H7FFFFFFF)
End If
End Function

'usage:
UnsignedLong(&HD8C3AC45) * 360 / &H10000 ^ 2
****************************

ALGO DE ESTO TIENE QUE VER NO?

salu2

"pepito" escribió en el mensaje
news:bbWLa.177078$
Ocurre que al definir la variable como Word, estás obviando el signo y
ganando un bit más, por lo que la cantidad que estás metiendo en la


variable
es "legal". Para sacar este tipo de cuentas puedes recurrir a algún
mecanismo para no desbordar las variables enteras que te ofrece VB. Si no
quieres usar variables de punto flotante, puedes usar variables de tipo
Currency, que se almacenan en BCD y no en formato mantisa+exponente, por


lo
que no pierdes precisión.

Este es un problema que tiene VB al no ofrecer tipos de datos enteros no
signados, pero en fin de cuentas tampoco es como para volverse locos,
siempre hay opciones. Prueba cambiando los tipos de datos y me comentas...

Salu2



"Federico Hernández Arce" <federicoha@(remove)hotmail.com> escribió en el
mensaje news:
> Buenas Grupo.
>
> Tengo una pequeña (pequeña?) consulta sobre el tema de referencia.
>
> ***************
> Observaciones
> Si alguno programo para el Flight Simulator 2002 mejor, pero sino, es lo
> mismo
> ***************
>
> 1. Tengo una app hecha en delphi (no por mí) que puede enviar (escribir)
en
> el simulador y lo hace correctamente
> 2. Tengo mi app hecha en VB que supuestamente haría lo mismo, PERO NO LO
> HACE
>
> Sucede que la variable en cuestión es Word (según el delphi)
> La app le manda un valor (16384) que luego de un cálculo lo transforma


en
> 90º (x * 360 / 65536) y el simulador, correctamente muestra 90º
>
> Ahora viene lo mío
> **************
> Hago lo mismo, exactamente lo mismo
> defino la variable como long y le hago el cálculo que he dicho, y


verifico
> en un label que el cálculo de 16384 pero en realidad el simulador apunta


a
> 76º (que en valor sería 13873) (tal valor lo verifico en la app de


delphi)
> como verán, existe un gap entre lo que quería hacer y lo que realmente
paso
>
> estimo que es un problema de variables y sus definiciones, pero no me


hago
> la idea de que podría ser
>
> alguna sugerencia
> necesitan más info para tirarme una cuerda?
>
> desde ya les estoy muy agradecido
>
> salu2.
>
>


Respuesta Responder a este mensaje
#3 pepito
30/06/2003 - 18:41 | Informe spam
Supongo que por ahí van los tiros, aunque no tengo ni p... idea de qué
magnitudes trabajas, pero si en Delphi alcanzaba con un Word, pues igual en
VB con el Unsigned Long a la cañona que ponen también va... Prueba y me
comentas :-P

Salu2


"Federico Hernández Arce" <fhernandez@(remover)hotmail.com> escribió en el
mensaje news:
sabes que algo de eso era
me hiciste acordar, en algún momento alguíen me paso ésto, que en realidad
es algo de lo que hablas vos

****************************
in C
0xD8C3AC45 = 3636702277 (unsignedint)
3636702277*360/(65536*65536) = 304.82486349530518054962158203

in VB
&HD8C3AC45 = -658265019
CDec(&HD8C3AC45) * 360 / &H10000 ^ 2 = -55.1751365046948
because vb have no unsigned data type, so you need do like this
(CDec(&HD8C3&) * &H10000 + &HAC45&) * 360 / &H10000 ^ 2 304.824863495305
****************************


si bien no es específicamente lo que preguntaba, la idea esta por esos


lados
y la función que me paso es esta

****************************
Function UnsignedLong(ByVal SignedLong As Long) As Double
Const DBL_UNSIGNED_BIT31 = 2147483648# '&H80000000
If SignedLong >= 0 Then
UnsignedLong = SignedLong
Else
UnsignedLong = DBL_UNSIGNED_BIT31 + (SignedLong And &H7FFFFFFF)
End If
End Function

'usage:
UnsignedLong(&HD8C3AC45) * 360 / &H10000 ^ 2
****************************

ALGO DE ESTO TIENE QUE VER NO?

salu2

"pepito" escribió en el mensaje
news:bbWLa.177078$
> Ocurre que al definir la variable como Word, estás obviando el signo y
> ganando un bit más, por lo que la cantidad que estás metiendo en la
variable
> es "legal". Para sacar este tipo de cuentas puedes recurrir a algún
> mecanismo para no desbordar las variables enteras que te ofrece VB. Si


no
> quieres usar variables de punto flotante, puedes usar variables de tipo
> Currency, que se almacenan en BCD y no en formato mantisa+exponente, por
lo
> que no pierdes precisión.
>
> Este es un problema que tiene VB al no ofrecer tipos de datos enteros no
> signados, pero en fin de cuentas tampoco es como para volverse locos,
> siempre hay opciones. Prueba cambiando los tipos de datos y me


comentas...
>
> Salu2
>
>
>
> "Federico Hernández Arce" <federicoha@(remove)hotmail.com> escribió en


el
> mensaje news:
> > Buenas Grupo.
> >
> > Tengo una pequeña (pequeña?) consulta sobre el tema de referencia.
> >
> > ***************
> > Observaciones
> > Si alguno programo para el Flight Simulator 2002 mejor, pero sino, es


lo
> > mismo
> > ***************
> >
> > 1. Tengo una app hecha en delphi (no por mí) que puede enviar


(escribir)
> en
> > el simulador y lo hace correctamente
> > 2. Tengo mi app hecha en VB que supuestamente haría lo mismo, PERO NO


LO
> > HACE
> >
> > Sucede que la variable en cuestión es Word (según el delphi)
> > La app le manda un valor (16384) que luego de un cálculo lo transforma
en
> > 90º (x * 360 / 65536) y el simulador, correctamente muestra 90º
> >
> > Ahora viene lo mío
> > **************
> > Hago lo mismo, exactamente lo mismo
> > defino la variable como long y le hago el cálculo que he dicho, y
verifico
> > en un label que el cálculo de 16384 pero en realidad el simulador


apunta
a
> > 76º (que en valor sería 13873) (tal valor lo verifico en la app de
delphi)
> > como verán, existe un gap entre lo que quería hacer y lo que realmente
> paso
> >
> > estimo que es un problema de variables y sus definiciones, pero no me
hago
> > la idea de que podría ser
> >
> > alguna sugerencia
> > necesitan más info para tirarme una cuerda?
> >
> > desde ya les estoy muy agradecido
> >
> > salu2.
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida