Int, Long, Float… Ehhh… ¿BigInteger?

Mi conocimiento de semántica (hablando de lenguajes computacionales claro) es limitada. Llevé el curso de System Architektur donde vivos compiladores y todo eso. Sin embargo hay un tema que me llena de congoja, problemas y dudas existencialistas.

Como expliqué en otro post, me dedico a jugar con Project Euler, y en uno de los ejercicios es necesario calcular 100!. No me voy a poner aquí de matemático para definir las maneras optimas de calcular 100!. Simplemente diré que ¿cómo es posible que C# (o C en Linux) no tenga un tipo más grande que long float? y peor aún, ¿cómo es posible que PHP sí?.

Bueno, decir que PHP sí tiene es un poco de engañe, ya que en realidad, estrictamente hablando, PHP no tiene tipos. $Variable = “12354” pude ser usado tanto como cifra como string, sin tener que hacer un type-casting.

Bueno, pues en C# por ejemplo, que es donde he estado haciendo los ejercicios para familiarizarme con el lenguaje, si es necesario un type-casting (como en C, C++, VB, etc). Y bueno, es tan sencillo como decir Variable_Numero.toString() y listo, puede ser usado como un String un numero int.

Pero el tema de este post es la imposibilidad de calcular 100!. El compañero de cabrilandia, usando el mismo algoritmo, pudo sacar la suma de las cifras de 100!. Lo cual yo no pude hacer en C# en Windows. Yo se lo que dirán: “Estúpido bastardo hereje, no sabes que existe BigInteger?”. Sí, si sé.

No sé bien su historia, hasta donde tengo entendido en la Framework 2.0 si estaba implementado el BigInteger en la libreria System.Math, pero en la 2.5-3.5 no. La verdad ni idea. Investigando descubrí que Java si tiene una implementada en sus librerías. Así que seguí buscando sin descanso ni tregua, hasta que en CodeProject encontré la implementación de un monito por ahí de los BigIntegers.

Pero no crean, de todos modos no funcionó. Estuvo muy cercano (falló por 10), pero aún así no correcto. Entonces me he quedado pensando. Si mocosoft está conciente que un tipo BigInteger es necesario para cosas como encriptación con primos enormes, y micro$oft implementa su propio BigInteger en sus algoritmos de encriptación, porque diablos no hace una librería, un método, una clase, un archivo, un download, un source code, un lo que se le ocurra, para que la gente normal como yo tenga una implementación razonable de BigIntegers.

Conozco la teoría de las sumas, pero como es posible que tengamos juegos 3D super woao, que nooooooooooooooooooo mms… Te haces del baño solo de ver el video de introducción, con valores de coma flotante tan precisos que te haces del baño de la exactitud… Pero no son capaces de crear un tipo BigInteger para la gente normal? Tan difícil es?.

Ahora comprendo sistemas distribuidos como Boinc.

¿O será sólo que soy un pésimo programador?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*