En este grupo En todos

Grupo de Turbo pascal



¿Por qué me sale el "error 200: division by zero" si yo no hago ninguna división en mi programa?.

Oscar Manuel
Formación por competencias laborales i...
Escrito por Oscar Manuel Cujuy Gario
el 15/09/2009 | Nivel Medio

Independientemente de si tengas o no una operación de división en tu programa, para que aparezca este error es suficiente que hayas incluido la biblioteca estandar CRT como parte de la cláusula USES en tu programa. El error está en esa biblioteca y no tiene nada que ver con lo que hayas escrito tú.

El problema con el RTL200 aparece con procesadores de más 166 MHZ si son Pentiums, o más de 200 MHZ si son Pentium MMX (y los AMD de esas o mayor velocidad también). Hoy en día esas máquinas están bastante obsoletas por lo que casi cualquier máquina actual experimentará el error mencionado.

El RTL200 aparece cuando se declara la unidad estandar CRT ("uses crt;"), concretamente el problema está en la implementación del procedimiento Delay() dentro de esa unidad. El error de división por cero se debe a que cuando se inicializa la unidad CRT debe calcular a cuántos ciclos de CPU equivale una centécima de segundos, para ello se pone un contador a contar los ciclos, usualmente en CPUs "lentos" la cantidad de ciclos por segundos no alcanzan a un valor muy grande como para desbordar un integer pero en los CPUs rápidos sí se produce un overflow, la variable correspondiente toma valor cero (por el overflow) y luego es usada en una división, es allí donde salta el error RTL200.

Borland nunca ha publicado un parche oficial para este problema pero programadores independientes han propuesto diferentes soluciones, una de ellas es el parche el cual lo puedes descargas en este grupo.

Eduard Castro
Ingenieria de sistemas unexpo - luis c...
Escrito por Eduard Castro
el 29/09/2011 | Nivel Medio

Excelente Explicacion.. Y muy util.... Gracias