HP ha tenido que lanzar una actualización de firmware para sus unidades SAS (Serial-Attached SCSI) que utilizan en servidores. Sin ese firmware, los SSD de la compañía morirían exactamente a las 32.768 horas de estar operativos, o a los 3 años, 270 días y 8 horas.
|
etiquetas: ssd , hp , firmware , 32768 , error
La cagada es grande y estas cosas se compran en lotes
Cuando no puedes cambiar el origen de los datos, la ñapa oficiosa para saber si un número es igual a otro suele ser comparar su diferencia con el margen de error.
Es decir puedes decidir si precio1 y precio2 son iguales, haciendo abs( precio1 - precio2 ) < 0.001
En base decimal, cualquier fracción cuyo denominador no se componga exclusivamente por potencias de dos y cinco, tendrá decimales periódicos.
En base binaria sucede lo mismo cuando el denominador no se compone exclusivamente por potencias de dos.
Cifras como 49.99 no se pueden expresar en binario con la misma precisión con la que se expresan en decimal. En binario tiene infinitos decimales periódicos.
Si buscas por Internet verás ejemplos cosas como que sumar 0.1 y 0.2 no da 0.3 (no sé si este concretamente es un caso real)
Sea como sea, usando céntimos te quitas de un plumazo ese peligro.
Podrían haber implementado esto de forma voluntaria sin calibrar totalmente las consecuencias. Podrían haberse dado cuenta más tarde de que esta forma de implementar la obsolescencia haría que el fallo se presente de una forma masiva y que eso sería una mala publicidad. Si hubo ignorancia de algún tipo no influirá en la responsabilidad legal.
Los importes, por la ley del Euro, son cantidades enteras de céntimos de euro. Es decir que tú puedes legalmente pagar o cobrar un importe de 12,34€ o de 12,35€ pero no ninguna otra cantidad entre esas dos. Por ello la forma correcta de guardarlo en un ordenador es dentro de una variable capaz de manejar números enteros, es decir exactos. Si sumas miles de estos importes el resultado es una cantidad exacta.
Los floats no pueden hacer esto pues guardan aproximaciones a una cantidad, pero no una cantidad exacta. No importa lo muy buena que se la aproximación, no es una cantidad exacta.
Estas aproximaciones son tan buenas que si sumas no muchos de estos números, el redondeo que se realiza al presentar la cantidad enmascarará el resultado presentándolo como la cifra exacta correcta, pero no es cierto, es un redondeo. Si sumas miles de estas cifras el error se acumula y supera el umbral del redondeo de la presentación y obtienes resultados incorrectos.
El mundo real es siempre peor y por muy bien que programes no hay forma de cuadrar una contabilidad cuando hay leyes inconsistentes entre sí que te obligan a redondear unas cosas al céntimo(*) y otras cosas al euro y luego pretenden que eso cuadre, lo que no es posible. Lo que se hace en la práctica son apuntes contables de cuadrar a la fuerza unos pocos euros porque sí.
(*) La ley del euro prevé "operaciones intermedias" con muchos decimales que luego hay que redondear o truncar para poder hacer una factura con céntimos exactos.
Haría algo que se dispare despues de x años, y con un abanico suficientemente grante para no levantar sospechas.
Ejemplo: 8 años +/- 4 años.
Pero los que no tienen idea de programación, les gusta pensar en las conspiraciones y demás.