Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

215
Vistas
El uso de números de coma flotante en condiciones de cambio no funciona, ¿por qué?

Para una mejor comprensión, he agregado una captura de pantalla. Está dando el error, la etiqueta del caso no se reduce a una constante entera. ¿Qué significa? la imagen muestra el código con error al usar el interruptor

 #include <stdio.h> int main() { int a = 1.0; switch (a) { case 1: printf ("1"); break; case 1.0: printf ("10"); break; default: printf ("default"); } }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Porque el switch depende de la comparación exacta de datos simples.

Las comparaciones entre flotantes probablemente no funcionen como se espera, por ejemplo, hay un cero negativo y uno positivo.

Ver: ¿Están rotas las matemáticas de punto flotante?

Por estas razones, no puedes "simplemente" decir "a == b" cuando lo dices en serio, como humano. Es por eso que el estándar C simplemente no lo permite como case en un switch .

La verdad es: ¡el hecho de que estés tratando de hacer eso es una buena razón para prohibirlo! O está usando flotantes donde no debería (es decir, para almacenar un conjunto limitado de valores discretos), o no ha entendido realmente cómo funcionan los flotantes, y usarlos en una declaración de switch conducirá a un comportamiento inesperado.

about 4 years ago · Juan Pablo Isaza Denunciar

0

En cuanto a la parte "Por favor, ayúdame" de tu pregunta, probablemente puedas implementarla más o menos de la siguiente manera...

más bien que

 double x=1.,y=2.; blah; blah; blah; switch(x){ default: break; case y: blah; break; }

intente en su lugar algo como

 double x=1., y=2., xmax=10000., xmin=1.; int ix=1, iy=2, imax=100; blah; blah; blah; ix = ((x-xmin)/(xmax-xmin))*((double)imax); iy = ((y-xmin)/(xmax-xmin))*((double)imax); switch(ix){ default: break; case iy: blah; break; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Por qué no podemos usar números de punto flotante en declaraciones condicionales de cambio?

  1. Porque la definición del lenguaje lo dice.

  2. Porque comparar números de punto flotante para la igualdad exacta (lo que hace implícitamente una declaración de cambio) a menudo es una mala idea.

  3. Porque usar variables de coma flotante como variables de control suele ser una mala idea. @Steve cumbre

  4. No hay una necesidad imperiosa de esta función.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda