2011-11-08 11 views
5

¿Por qué el STL no contiene un tipo de datos entero ilimitado?¿Por qué no hay un tipo entero sin tamaño?

Siento que es un tipo de datos cuyo propósito es similar al de una cadena.
Los programadores no tendrían que preocuparse por el desbordamiento de valores y podrían trabajar con números mucho más grandes.

Tengo curiosidad por saber si hay una razón específica para su ausencia.

Este no es un problema sobre cómo implementar o usar uno de una biblioteca de terceros, , sino solo una pregunta de por qué el idioma no viene con uno. Se agradecen todos los enlaces sobre el tema.

+2

Supongo que la aritmética grande no es fácil de implementar (de manera eficiente). – Mysticial

+2

"pero solo una pregunta sobre por qué el idioma no viene con uno". ¿Por qué debería? Todo el mundo tiene su propio pequeño problema con las mascotas en el que piensan que algún lenguaje debe ser compatible con X. Pero eso no significa que deba hacerlo. He estado programando durante más de 20 años y he usado cadenas de caracteres con mucha frecuencia.Y, sin embargo, nunca he necesitado un entero de precisión arbitrario. Eso no quiere decir que esa sea una razón para no tener uno. Pero sugiere que tal vez la pregunta es por qué _debería_ la biblioteca estándar de C++ tener un entero de precisión arbitrario, no por qué no lo hace. –

Respuesta

3

Probablemente signifique arbitrary precision arithmetic o números grandes.

Quizás no está en C++ porque no es relevante para un público amplio. Muy probablemente, casi cualquier código C++ no trivial usaría alguna parte de la STL (std::ostream o colecciones como std::vector o tipos como std::string).

Pero una gran cantidad de código no necesita números grandes.

Del mismo modo, las interfaces gráficas (como Qt) no son parte de STL, por las mismas razones. A muchas personas no les importan estos problemas (por ejemplo, en el código del servidor o en las aplicaciones numéricas).

Y definir una biblioteca estándar es un gran esfuerzo. En mi opinión, C++ STL es quizás demasiado grande; no es necesario agregar mucho más adentro.

Es posible que desee utilizar GMP si lo necesita.

1

Porque incluso cuando el camino de regreso STL fue diseñado:

Ya fueron significativamente mejores arbitraria bibliotecas precisión enteros en C. Claro que no eran oficialmente las clases, pero las estructuras que utilizan todavía no el trabajo. Una implementación STL realmente no obtendría una gran aceptación por parte de aquellos que necesitan enteros de precisión arbitrarios, lo que me lleva a mi segundo motivo:

No muchas personas realmente necesitan enteros de precisión arbitrarios. Los que lo hacen, obtienen una biblioteca de terceros. Para la mayoría de la gente, los largos de 32 bits hicieron el trabajo en esos días. Para muchas personas todavía lo hacen. Y el rendimiento es significativamente mejor. Incluso en un sistema sin operaciones nativas de 64 bits, puedes simularlas con unas pocas instrucciones y aún ser significativamente más rápido que una implementación entera arbitraria (no importa cuán delgado lo hagas, la parte arbitraria y las asignaciones de montón probablemente lo harán más costoso que dos operaciones enteras menores y un acarreo manual).

Más allá de todo, simplemente se debe a que Stroustrup no sintió que tuviera el atractivo suficiente para encajar en su visión del STL.

Creo que una mejor pregunta sería por qué no hay moneda o clase decimal de precisión arbitraria en el STL, ya que creo que son mucho más comunes un problema, pero las respuestas son las mismas.

Cuestiones relacionadas