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

147
Visualizações
¿Por qué el uso de números de punto flotante en el interruptor no funciona?

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"); } }
over 4 years ago · Santiago Trujillo
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.

over 4 years ago · Santiago Trujillo 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...

en vez de

 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; }
over 4 years ago · Santiago Trujillo 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.

over 4 years ago · Santiago Trujillo 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