Pregunta

Probablemente estoy completamente equivocado, y que realmente no sabe nada al respecto, pero tengo una pregunta acerca de los tipos de datos decimales número de lenguajes de programación. Yo entiendo que los flotadores no son del todo precisas, porque están almacenados en el sistema binario con una potencia o algo, pero siempre me he preguntado por qué tipos de datos de números decimales no sólo almacenan un número como si no hubiera un decimal, también lo hacen los cálculos si no había un número decimal, y luego añadirlo después. Al igual que en esta situación:

2.159 * 3.507 --> 2159 * 3507 = 7571613
  ^^^     ^^^
  123     456

6 decimals in total... 7571613 -> 7.571613
                        ^^^^^^
                        654321

* 3,507 2,159 manera = 7.571613

¿Por qué no puede simplemente trabajar así?

¿Fue útil?

Solución

Eso es exactamente lo que hacen. Un número de coma flotante se almacena en forma de exponente. Supongamos que estamos trabajando en un equipo basado en decimal, así que no tengo que cambiar todos estos números a binario.

Usted está multiplicando 2.159 * 3.507, pero en realidad 2.159 se almacena como 2159 * 10^-3 y 3.507 se almacena como 3507 * 10^-3. Dado que estamos trabajando en un sistema basado en decimal, se asume el 10, por lo que en realidad sólo tiene que almacenar -3 sin la 10, así: 2159,-3 o 3507,-3. El -3 es la ubicación del "punto flotante":. Como el punto se mueve dejaron las disminuciones de punto flotante (.3507 se almacena como 3507,-4) y como el punto se mueve derecha los aumentos de punto flotante (35.07 se almacena como 3507,-2)

Al multiplicar los dos juntos, el número decimal (o el número binario en un ordenador binario) es la única cosa que se multiplica. El punto flotante se agrega Así que detrás de las escenas de lo que ocurre es:

2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6

7571613,-6 se acaba 7571613 * 10^-6 (recuerde que podemos asumir la 10 porque estamos trabajando en un ordenador decimal), que es la misma que 7.571613.

Por supuesto, el punto flotante no tiene que ser -3, podría ser cualquier cosa que encaja en el almacenamiento:

21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613

Y, por supuesto, la mayoría de los ordenadores no almacenan cosas en decimal, por lo que las cifras reales serían todos en binario, y el punto flotante serían algo así como 2^-9 -> -9 en lugar de 10^-3 -> -3. Pero se entiende la idea.

Otros consejos

Esto se llama " aritmética de coma fija " La gente lo hace todo el tiempo .

http://gameprogrammer.com/4-fixed.html

Hay un buen número de implementaciones de aritmética de punto fijo. Sin embargo, a menudo nos quedamos sin decimales muy, muy rápidamente con el almacenamiento de punto fijo. Es ideal para las transacciones monetarias, en los que sabemos que no vamos a almacenar / cuidado acerca de los números irracionales.

Además, para muchas otras cosas, aritmética de coma fija simplemente no vale la sobrecarga. punto flotante es mucho más rápido.

Cosas que leen:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top