2010-01-14 14 views
5

¿por qué necesitamos enteros y flotantes en el procesador? Graciasflotantes y enteros ....?

+2

Huele a tarea. –

+1

De hecho, creo que esta es una buena pregunta. Cuando has estado en el negocio el tiempo suficiente, das por hecho ciertas cosas. Es una buena idea cuestionar sus suposiciones de vez en cuando. –

+1

He votado a favor esta pregunta. Puede oler a la tarea, pero seguro generó una pequeña tormenta de discusión y no creo que todos los involucrados sean estudiantes. Sé que no, aunque estoy trabajando desde casa hoy. –

Respuesta

0

Todos son solo números, por lo que podría pensar que no necesita distinguir. Pero, en muchos idiomas, hay una optimización posible cuando se realizan cálculos enteros: sumar, restar, multiplicar y dividir son posibles con las instrucciones de la CPU. Del mismo modo, hay instrucciones que hacen operaciones similares en números de coma flotante, pero debido a que los números se representan de manera diferente en la máquina y las operaciones son diferentes, tiene sentido hacer aparecer la distinción entre enteros y flotantes que se ve en el procesador, en el lenguaje de programación en sí.

C#, Java, C++ y otros idiomas tienen distintos tipos para manejar enteros versus flotantes. Javascript hace la elección opuesta: no hay ningún tipo de entero especial, y si no me equivoco, todos los números son flotantes.


En cuanto a por qué necesita enteros y flota - flotadores permiten una gama mucho más amplia de valores, aunque en extremos (por ejemplo, cantidades astronómicas) la precisión cae. No puede representar 1.37999933247474x10e24 precisamente en matemática de punto flotante. Por otro lado, los ints ofrecen precisión y velocidad para un conjunto fijo de números.

0

Los enteros son más fáciles en los recursos del procesador y, a menudo más rápido. Esto fue un gran problema hace muchos años, cuando los procesadores ni siquiera incorporaron capacidades de coma flotante. No tanto ahora, pero las diferencias aún pueden ser significativas en el código estricto.

Los números enteros son a menudo todo lo que necesita.

0

Los valores de coma flotante tienen un [mucho] mayor rango que los enteros. Además, pueden representar valores fraccionarios. Sin embargo, estas características se proporcionan a costa de una pérdida de precisión.

Editar: (¿qué quiero decir con pérdida de precisión)
aritmética de enteros es siempre exacta, siempre que uno no proporciona operando el cual ocurre un exceso o una división por cero.
Este no es el caso con la aritmética de coma flotante, por lo que algunas partes de los valores pueden perderse al usar dichos valores en operaciones simples. La razón de esto es que el tremendo rango ofrecido por los valores de coma flotante es tal que es imposible representar todos los valores contiguos dentro del rango, dado el almacenamiento relativamente pequeño (típicamente 8 o 16 bytes).

+1

No siempre. Un doble de 64 bits tiene más precisión que un int int de 32 bits. –

+0

@Mark Ransom. independientemente del tamaño de la variable, un entero es siempre, _dentro de su rango_, 100% preciso. Eso es diferente de un valor flotante, que dentro de su rango puede incluir partes que se perderán cuando el valor se use para diversos cálculos, incluso simples. – mjv

+0

Es trivialmente fácil generar una constante que represente el valor de coma flotante más grande que garantice la misma precisión a un número entero. El punto flotante a menudo proporciona incluso mayores garantías. ¿Qué obtienes si multiplicas 2147483647 x 2147483647 como números enteros? Como dobles? –

2

Los enteros son para contar, los números de punto flotante son para calcular. Los tenemos tanto en matemáticas (donde se llaman números enteros y números reales, respectivamente), que los necesitamos en algoritmos y también en programas. Fin de la historia.

Claro, el rango de la mayoría de las implementaciones de número fp es mayor que el rango de la mayoría de las implementaciones enteras pero podría inventar un lenguaje mañana en el que permita enteros de 512 bits pero solo de 16 bits. , 3 bits exponenciales, 12 bits significativos). Los enteros todavía no están cerrados en división y los números en coma flotante todavía no sirven para contar porque, aunque hay una función sucesora en números fp, no hay números reales y nos gusta simular que los números fp son una implementación cercana de numeros reales.

No, los enteros no son más fáciles en el procesador, el procesador realiza operaciones lógicas booleanas fundamentales en los bits. Y si el procesador X1 realiza una aritmética entera más rápido que la aritmética fp, una red de arrastre a través de los bancos de memoria encontrará un ejemplo de contador.

Ni siquiera necesitamos números fp para fracciones, podríamos usar pares de enteros para representar el numerador y el denominador.

La precisión absoluta de los enteros es la razón por la que los usamos para contar. Para todos los efectos prácticos, la precisión de las implementaciones de FP existentes es suficiente (en la actualidad, hay una demanda natural para atraer desacuerdo!)

Saludos

Marcos

+1

Los números FP no son números reales. Por favor, no le des OP ni a nadie esa idea. Los números FP no están cerrados por división, como usted menciona. Infinity es un número de coma flotante, pero ni un real ni un int. – Potatoswatter

+1

El punto flotante está completamente cerrado en la división. Cuando divide dos valores de coma flotante, obtiene otro valor de coma flotante. Siempre. Puede que no sea exactamente igual al resultado que obtendría si fueran números reales, pero eso no es lo que * closed * significa. La división de los valores de coma flotante está * definida * para incluir este redondeo. –

+0

Oh, creo que aquí tenemos un tema de terminología sutil. Potatoswatter dijo "FP number" y Stephen dijo "floating point value". ¿Qué hay de NaN? Es un valor que puede contener una variable de coma flotante, pero según su propia admisión no es un número. Los números de coma flotante * no se cierran en la división, pero los * valores * de las variables de coma flotante se cierran bajo división, ¿verdad? – Ken

0

enteros son las cosas más comunes para usar en las tareas de programación. Pueden representar direcciones de memoria. Es fácil contar de un número entero al siguiente: simplemente agrega uno.

Los valores de coma flotante se utilizan para aproximar números reales. Los números reales son el tipo más común de matemáticas continuas. La matemática continua se usa para representar el mundo real. (De ahí la terminología "número real".)

Los valores de coma flotante no se pueden usar como enteros. No se puede contar fácilmente de X al siguiente número mayor que X. Se redondean, y no hay garantía de que X + 1 sea incluso un número diferente a X. En términos generales, dos números de coma flotante podrían ser diferentes si fueron producidos por diferentes secuencias de operaciones, incluso si se supone que las expresiones son iguales.

Los números de coma flotante son impredecibles, como en la vida real. Los enteros son ordenados y eficientes, como las computadoras.

+0

Los números de coma flotante son completamente predecibles. No es como si tu computadora estuviera devolviendo un número aleatorio cuando solicitas el anuncio 1e-32 a 1e + 32. Simplemente no es simple, y ciertamente no es intuitivo para el usuario ocasional. Tienes que estudiar el estándar de implementación relevante y estar dispuesto a resolver los detalles en papel si es necesario. –

+0

Ciertos aspectos de la vida real también son predecibles y se vuelven más predecibles con más análisis. Es una analogía. – Potatoswatter

0

En la mayoría de las aplicaciones, los números de coma flotante se pueden reemplazar por números enteros, al definir cuidadosamente qué rango de valores se debe representar con qué precisión y multiplicar con factores de escala adecuados. Sin embargo, este es un esfuerzo de desarrollo adicional, que solo vale la pena en pequeñas plataformas integradas (es decir, pequeños microcontroladores) que no pueden hacer los cálculos en aritmética de coma flotante en el tiempo disponible.

Con números de coma flotante, puede alejarse sin pensar en la representación de valores la mayor parte del tiempo, siempre y cuando se mantenga dentro del rango disponible y la precisión. Desafortunadamente, esto es bastante peligroso, porque de esa manera es posible que no te des cuenta cuando salgas de la región segura.

0

Una perspectiva ligeramente diferente: los enteros son útiles para cantidades digitales, mientras que los flotantes son útiles para cantidades analógicas. Un ejemplo, mientras mira los barcos en el puerto, use los puntos para contar los barcos, use flotadores para representar el nivel del agua.

Cuestiones relacionadas