EDICIóN GENERAL

La calculadora de Windows es el proyecto más popular de todo GitHub desde que Microsoft liberó su código

Comparar la igualdad de dos double o float es una burrada.
#4 Por que es una burrada?
#15 imagino que se refiere a la pérdida de precisión tras realizar operaciones de coma flotante.

Sin dar más contexto y afirmar eso, la verdad que chirría un poco. Si realmente fuera una burrada, el lenguaje nunca te permitiría hacerlo, y obviamente todos los lenguajes te lo permiten.

De todas formas, el uso de floats/doubles no tiene porqué ser malo dependiendo del contexto, no son criminales, solo tienen sus limitaciones. Si necesitas precisión a nivel monetario u operaciones que necesitan exactitud, obviamente no te vale usar doubles, lo recomendable es recurrir a clases especializadas que te de tu lenguaje: BigDecimal en Java, Decimal en Python,...

En este caso concreto de la calculadora, sinceramente, no se cuanto uso le darán como calculadora científica, ni si por debajo realmente usa floats/doubles (el repo simplemente lo ojee por encima). En mi caso poco la uso, más que nada para hacer operaciones básicas o para pasar a hexadecimal/binario.
#16 Por otro lado, quien usara la calculadora de Windows para hacer cálculos que requirieran una máxima precisión hasta el punto de no querer errores al comparar dos floats...

La burrada sería confiar ese sencillo programa para que te clave resultados en operaciones matemáticas importantes.

Para el uso que le dábamos la gente de a pié, el posible error era inapreciable.
#15 Es una de esas antiguas "máximas" de la programación: "no compartas por igual dos float".
La gracia de esta máxima es que la mayoría cuando éramos principiantes cometimos ese error y nos trajo de cabeza hasta que aprendimos la lección de la manera difícil.
La explicación es simple: a no ser que copies el valor de un float a otro, difícilmente dos números "iguales" se representen igual en memoria. Siempre habrá una diferencia en algún bit aunque al mostrarlo en pantalla con una cantidad de decimales "legible" se vean iguales.
La solución es en lugar de compararlos, restarlos y comparar el resultado con un número muy pequeño.
#21 Mirando la biblioteca decimal de Python he entendido algo así. Gracias por la explicación. Así, que realmente hacer la comparación de igualdad sería una absurdez porque nunca se cumpliría, es decir nunca serán iguales, por lo que dices y por lo que he visto biblioteca decimal de Python, donde decimal si que representa con exactitud los valores y Float no.
#21 O redondearlos a la precisión deseada antes de compararlos.
#15 en 32 o 64 bits no puedes representar todos los decimales posibles porque los decimales son infinitos.
Un float es una representación de un número decimal mediante un signo, una mantisa y un exponente, empaquetados en 32 o 64 bits (float o double).

Los números decimales que tu ves "redondos", como 1.0, internamente tienen que ser representados así, de forma que en realidad un cálculo que "debería" darte 1.0 te da 0.99999999999, pero no 1.0

El resultado práctico es que nunca se comparan dos floats entre sí directamente al menos que realmente quieras saber que ambos tienen la misma representación binaria.
Para todo lo demás has de comparar teniendo en cuenta epsilon, que es el mínimo número representable en tu implementación de flotantes, generalmente una constante (en C++:
en.cppreference.com/w/cpp/types/numeric_limits/epsilon)

Algunos lenguajes de programación hacen eso por ti automáticamente, pero la calculadora de Windows está programada en una variante de C++ de Microsoft y requiere llamar explícitamente a alguna función que compare teniendo en cuenta epsilon si es lo que deseas. C++ es un lenguaje muy explicito para el programador.

Además de todo eso, de raíz es mala idea usar flotantes para una calculadora. Los flotantes son muy rápidos, pero una persona no hace millones de operaciones por segundo con una calculadora. Por tanto es un caso muy claro para usar no flotantes sino números decimales de precisión arbitraria.
Son más lentos, pero permiten infinitos decimales y permiten cualquier tipo de operación.
Hoy en día hay muchas librerías para eso en C++, compiladores como gcc las traen integradas.

Un ejemplo hermoso de calculadora de precisión arbitraria es "bc".
Es en línea de comandos, pero puede hacer cualquier operación.

menéame