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.
División por cero?
- AngelSalom
- Posts: 664
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Vinaros (Castellón ) - España
- Contact:
División por cero?
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Es cero, porque desde el errorsys se le dice que retorne cero.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.
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__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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:Es cero, porque desde el errorsys se le dice que retorne cero.
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: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.
Code: Select all
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 _ de ubedaAntonio Linares wrote:Bueno, tambien tan( 90 ) tiende a infinito, pero, ¿ como representar ese numero ?, logicamente en una calculadora, te sale ERR.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.
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:
Code: Select all
function Main() Alert( "antes" ) Alert( 2 / 0.0 ) Alert( "despues" ) return nil
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)