martes, 17 de mayo de 2016

El error de la base octal en Java



Todo empezó con una sencilla pregunta

¿Cuál es el resultado de la siguiente línea de código en java?:
int suma = 023 + 010;
System.out.println(suma); 
Pero utilizar la regla de "el cero a la izquierda no tiene valor" es la alternativa equivocada:
Lo que en lenguaje natural procesamos como una suma de resultado = 33;
para Java, el 0 a la izquierda se utiliza para expresar números en base 8, por lo que la suma tiene un resultado distinto:
  • 023 = 2*8 + 3 = 19:
  • 010 = 1*8 + 0 = 8;
  • 19 + 8 = 25.

Pueden comprobarlo en este compilador online, copiando/pegando las líneas de código puestas arriba.

Entonces, dicho con expresiones Java: 23 != 023
Y nótese que hasta el analizador web de sintaxis los muestra de distintos colores.

Bases aritméticas en Java

Java comprende el uso de base decimal, hexadecimal, octal y binaria.
Y se utilizan de la siguiente manera:
// Base decimal (10), comprende dígitos [0-9]
int decimal = 495; 
// Base hexadecimal (16), empieza con 0x o 0X, comprende dígitos y letras [0-9A-Fa-f]
int hexa = 0x1EF;  
// Base octal (8), empieza con 0, comprende dígitos [0-7]
int octal = 0757; 
// Base binaria (2), empieza con 0b o 0B, y comprende dígitos [0-1]
int binario = 0b111101111;
¿El problema es el lenguaje natural, o el problema es java?

Así como el error de interpretación; puede surgir un error de concatenación (para algoritmos de seguridad y encriptación, por ejemplo)
Entonces, pensando en calcular un número, internamente Java calculará su equivalente en base octal... lo que potencialmente podría significar un error.

Mi propuesta:
Como la gente de Sun Microsystems Oracle sigue diariamente mi humilde blog, propongo que -tal cual base 2 y base 16, utilicen una notación especial para base 8: 0b, 0x, y 0o respectivamente.
(Y no, el "0" no se confunde con la "o", porque hasta la RAE ya eliminó la "ó" usada antiguamente para diferenciarla del cero).
Así que aquí la lanzo, aunque sea otra idea muerta en el ciberespacio.



Recibe en tu correo electrónico las últimas actualizaciones de éste blog:
Ingrese su e-mail:
(y no olvide confirmar su suscripción)
También me encuentras en facebook. También en twitter. También en tumblr.

viernes, 11 de marzo de 2016

Carreras de Computación en el Perú (2006)


Al año 2006, el club "Colegio de Ingenieros del Perú" contaba con un catálogo de nomenclaturas de carreras relacionadas a Computación:

NombreTotalEstadoPrivadas
Ciencias de la Computación321
Computación110
Computación Científica110
Estadística e Informática330
Ingeniería de Computación y Sistemas707
Ingeniería de Sistemas391920
Ingeniería de Sistemas de Información101
Ingeniería de Sistemas de Información y Gestión101
Ingeniería de Sistemas e Informática1248
Ingeniería de Sistemas Empresariales101
Ingeniería de Sistemas y Computación101
Ingeniería de Sistemas y Cómputo101
Ingeniería de Sistemas y Seguridad Informática101
Ingeniería de Software413
Ingeniería de Tecnologías de Información y Sistemas101
Ingeniería en Computación e Informática110
Ingeniería en Informática y Sistemas110
Ingeniería en Teleinformática101
Ingeniería Industrial y Sistemas101
Ingeniería Industrial con especialidad en Sistemas110
Ingeniería Informática1248
Ingeniería Informática y de Sistemas734
Matemática con especialidad en Computación110
Total1024260
41.18%58.82%

A pesar de tener el mismo nombre, en varios de los casos, el contenido NO ES COMPATIBLE, y por lo tanto no es posible afirmar que dos profesionales con el mismo título sean compatibles.

10 años después, no sé qué tanto han cambiado las cosas (tampoco encuentro una información parecida, actualizada).
Pero sigue existiendo la misma ambigüedad e incompatibilidad entre las carreras.

¿Habrá mejorado esta situación?

jueves, 18 de febrero de 2016

El fenómeno a observar y el observador




Muchos hombres rebalsaron el agua de la bañera antes que Arquímedes;
Muchas manzanas cayeron de los árboles desde el entonces jardín del Edén,
y (la fuerza de) la avalancha de vapor pudo ser notada en cualquier momento desde que se hirvió agua en una olla con tapa.

Todos estos casos ocurrieron eones antes de que su propio significado (y utilidad) sean percibidos.
Obviamente, un descubrimiento casual involucra tanto el fenómeno a observar y un apropiado e inteligente observador.

* Traducción libre, no literal
Walter CannonThe Way of an Investigator (1945)

(Previamente publicado aquí)