Actualmente estoy aprendiendo sobre la construcción del compilador y el diseño del lenguaje y estoy pensando en qué tipos de datos nativos quiero admitir en mi idioma. Ahora hay muchos idiomas que hacen una distinción entre números enteros y números reales. Sin embargo, recuerdo haber visto una charla de Douglas Crockford en la que dijo:
Tener un solo tipo de número en el sistema significa que no puede cometer un error al elegir el tipo de número incorrecto
También mencionó que recomienda una representación numérica diferente a la IEEE-754 comúnmente utilizada (por favor corríjame si me equivoco), nombrando DEC64. De ahí mi pregunta: para un lenguaje de propósito general que tiene un enfoque principalmente educativo, ¿qué representación numérica debo usar?
EDITAR: Con un enfoque educativo, estoy hablando de mi propio progreso en el aprendizaje de compiladores, no para educar a otros.
fuente
Respuestas:
Tenemos una representación numérica diferente en general porque tienen diferentes fortalezas y debilidades, ya sea velocidad, precisión o rango. Además, este tiene que ser el caso porque no podemos representar todos los números reales con memoria finita, siempre tenemos que elegir algunos que no podamos representar exactamente.
La cita de Doug Crockford que tiene es casi idiota, si solo puede elegir una representación, entonces no puede elegir la incorrecta, pero tampoco puede elegir la correcta. es decir, su única opción funcionará para algunos usos pero no para todos.
Es cierto que algunas representaciones son probablemente mejores ya que la primera opción para ir a DEC64 parece razonable aquí. Es una representación decimal en coma flotante, por lo que será menos sorprendente que IEEE-754 (que es un punto flotante binario) en la mayoría de las situaciones, ya que las personas tienden a pensar en decimal, por ejemplo, puede representar 0.3 exactamente. Todavía tendrá problemas de representación en algunas circunstancias, por ejemplo, agregar números realmente grandes y muy pequeños juntos
para leer más, sugeriría la serie de artículos de Richard Harris "por qué X no te arreglará el blues de punto flaging"
fuente
Para un lenguaje general, los números deben comportarse como los que se enseñan en la clase de matemáticas. Solo los lenguajes de propósito especial, como los de los controladores de dispositivos, deben tener matemáticas especiales.
Recomendaría usar números de precisión arbitraria en lugar de números de precisión fija. Sí, son más lentos, pero se comportan como la gente espera que los números se comporten. La colocación de límites artificiales en ellos se informará como un error.
fuente