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

710
Visualizações
¿Por qué aparece el error "el literal entero es demasiado grande para ser representado en cualquier tipo de entero" al asignar el valor flotante máximo de un solo punto?

Sé que según el estándar de punto único IEEE, el valor máximo de un flotador es 1.11111111111111111111111 * 2 ^ 127, que convertido en decimal es exactamente este número enorme -> 340282346638528859811704183484516925440.

¿Cómo es que recibo el error "el literal entero es demasiado grande para ser representado en cualquier tipo de entero" cuando intento asignar este valor a un flotante como este:

 int main(){ float biggest=340282346638528859811704183484516925440; }

¿No debería el compilador decir "bien, este es el valor máximo para un solo número de coma flotante y tengo que convertirlo al valor de 32 bits 011111110111111111111111111111111" donde el primer bit es el bit de signo, los siguientes ocho bits representan el exponente y todo otra cosa la mantisa?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Cuando 340282346638528859811704183484516925440 aparece en el código fuente, sin un . u otros caracteres que modificarían su tipo, es un literal entero, como se especifica en C 2018 6.4.4.1, que lo llama constante entera . Entonces, formalmente, el compilador lo interpreta como un tipo entero. El valor representado por este número es demasiado grande para representarlo en cualquier tipo de entero que admita su compilador, por lo que su compilador le advierte al respecto.

El hecho de que el valor que se le asigne a un float sea insuficiente. El compilador debe procesar el propio número antes de que tenga un valor que pueda convertir en un float .

La forma preferida de obtener el valor float finito máximo es incluir <float.h> con una directiva #include y usar FLT_MAX .

Si desea utilizar el número, puede convertirlo en una constante de coma flotante con el sufijo . . También puede agregar el sufijo f para que sea una constante float en lugar de double : 340282346638528859811704183484516925440.f .

El estándar C permite cierta holgura en la forma en que las implementaciones analizan las constantes de punto flotante, por lo que no se puede garantizar que el compilador produzca el valor exacto que representa el número, incluso si es representable en el tipo. Las buenas implementaciones de C lo harán. Sin embargo, puede evitar este problema utilizando la forma de punto flotante hexadecimal, que garantiza que producirá el resultado redondeado correctamente si la implementación de C utiliza un formato de punto flotante de base dos. De esta forma, el número es 0x1.fffffep127f .

over 4 years ago · Santiago Trujillo Relatório

0

Como no tiene un punto decimal ni un exponente, el número en su programa no se analiza como una constante de coma flotante decimal sino como una constante entera y supera el valor máximo de todos los tipos de enteros disponibles en su sistema. Su suposición sobre el comportamiento del compilador es incorrecta: el tipo de token se determina a partir de la sintaxis, no del contexto. Almacenar el valor de una constante entera en un float implica una conversión a tipo float , realizada en tiempo de compilación o en tiempo de ejecución.

Para especificar el número como una constante float , agregue un punto decimal y un sufijo F al final:

 int main() { float biggest = 340282346638528859811704183484516925440.F; }

Si solo escribe 340282346638528859811704183484516925440. la constante tendrá el tipo double y se convertirá en tipo float cuando se almacene en la biggest , lo que puede o no cambiar el valor.

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