lo que pasa es que he estado buscando porque no me da exacto esto, nunca entra en la condicion, no se que debo hacer para que X me de 0.456, el resultado de X despues de esa operacion es de 0.4560000000000030695446184836328029632568359375
#include <iostream>
using namespace std;
int main(){
double x=123.456;
x-=123;
if (x==0.456){cout<<"Iguales";}
}
Primero el valor de x no seria el que has dicho sino que seria 0.45600000000000307 porque los doubles no tienen tanta precisión en C++ y todos los dígitos de mas que coges son *****.
Porque pasa esto pues muy fácil los valores de punto flotante generalmente no tienen una representación binaria exacta. De hecho, los diferentes compiladores y arquitecturas de CPU existentes almacenan temporalmente los resultados a diferentes precisiones, por lo que los resultados pueden depender del entorno en que trabajemos y de un montón de cosas más.
Solución también muy fácil ver que los números a comparar se aproximan en un orden de magnitud.
Por ejemplo en nuestro caso seria algo así como:
if(abs(x - 0.456) <= 1e-5)
Si quieres compararlo con un error de +- 10e-5
abs() es la función valor absoluto de la librería cmath.