Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

228
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda