Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

214
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!