FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Divisi贸n por cero?
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Divisi贸n por cero?
Posted: Fri Nov 04, 2005 06:30 PM

Hola amigos del foro.
Me encuentro con Harbour que me saca a lo "macho" de la aplicaci贸n en cuanto se encuentra una divisi贸n por cero entre variables.
Se que no es correcto, pero en clipper no petaba
Tengo que revisar mi c贸digo o hay algo que pueda hacer??

Gracias.

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Divisi贸n por cero?
Posted: Fri Nov 04, 2005 08:48 PM

Angel,

Que build de harbour est谩s usando ? De que fecha ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Divisi贸n por cero?
Posted: Fri Nov 04, 2005 09:06 PM

Angel,

Con el build actual de Harbour, este c贸digo funciona bien:

function Main()

MsgInfo( "before" )

MsgInfo( 2 / 0 )

MsgInfo( "after" )

return nil

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Divisi贸n por cero?
Posted: Sat Nov 05, 2005 07:23 AM

Lo que se est谩 discutiendo ahora en la lista de desarrollo de Harbour es porque 2 / 0 = 0, cuando en realidad debiera ser infinito, y por lo tanto generar un error, 贸 un aviso.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Divisi贸n por cero?
Posted: Mon Nov 07, 2005 12:30 PM
Antonio Linares wrote:Lo que se est谩 discutiendo ahora en la lista de desarrollo de Harbour es porque 2 / 0 = 0, cuando en realidad debiera ser infinito, y por lo tanto generar un error, 贸 un aviso.


Es cero, porque desde el errorsys se le dice que retorne cero.
El problema de harbour, y que reporte hace tiempo, cosa que xHarbour tambien petaba pero Walter Negro lo soluciono, era cuando realizas divisiones entre int / double, es decir 1 / 0.0, 1.0 / 0, ocasionaba una caida no recuperable ni por errorsys , ni por begin secuenque , ni leches.

Deje por ahi los test de como en Harbour y xHarbour se rompia, lo que si se
es que en xHarbour fue corregido.

A mi me tuvo loco un tiempo hasta dar con el error estupido de dividir int / double, con el cero de por medio.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Divisi贸n por cero?
Posted: Mon Nov 07, 2005 12:38 PM
thefull wrote:Es cero, porque desde el errorsys se le dice que retorne cero.


Si, eso se est谩 haciendo. Pero en matem谩ticas, una cantidad dividida por cero es igual a infinito (tiende a infinito). Posiblemente Clipper sali贸 del paso haci茅ndolo igual a cero, pero no es correcto.

thefull wrote:
cuando realizas divisiones entre int / double, es decir 1 / 0.0, 1.0 / 0, ocasionaba una caida no recuperable ni por errorsys , ni por begin secuenque , ni leches.


Acabo de probar este test con el build m谩s reciente de Harbour, y NO se cae la aplicaci贸n. Deben haber arreglado lo que comentas. Lo que si es que el valor que muestra es incorrecto:

function Main()

   Alert( "antes" )
   Alert( 2 / 0.0 )
   Alert( "despues" )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Divisi贸n por cero?
Posted: Mon Nov 07, 2005 04:02 PM
Antonio Linares wrote:
thefull wrote:Es cero, porque desde el errorsys se le dice que retorne cero.

Si, eso se est谩 haciendo. Pero en matem谩ticas, una cantidad dividida por cero es igual a infinito (tiende a infinito). Posiblemente Clipper sali贸 del paso haci茅ndolo igual a cero, pero no es correcto.


Bueno, tambien tan( 90 ) tiende a infinito, pero, 驴 como representar ese numero ?, logicamente en una calculadora, te sale ERR.
Pero, por "compatibilidad" con clipper DEBE de retornar CERO , o ERROR!

A elegir, me quedo con cero :-)
Asi si coges la calculadora de windows, aplica 2 / 0 = Error:division por cero.
Ahora, aplicas tan( 90 ) = Entrada no v谩lida para func.

OH!!!, me quedo con cero , jejejel o al menos, que el errorsys DEVUELVA CERO, mas sencillo imposible...
IF ( oError:genCode == EG_ZERODIV ) // by default, division by zero yields zero
RETURN 0
ENDIF


thefull wrote:
cuando realizas divisiones entre int / double, es decir 1 / 0.0, 1.0 / 0, ocasionaba una caida no recuperable ni por errorsys , ni por begin secuenque , ni leches.


Antonio Linares wrote:Acabo de probar este test con el build m谩s reciente de Harbour, y NO se cae la aplicaci贸n. Deben haber arreglado lo que comentas. Lo que si es que el valor que muestra es incorrecto:

function Main()

   Alert( "antes" )
   Alert( 2 / 0.0 )
   Alert( "despues" )

return nil


Pues si el valor es incorrecto, no esta bien :-). Por cierto, pregunta tambien por el ValType( 2 / 0.0 ), creo que tambien se iba por los caminos de ubeda :-)
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)

Continue the discussion