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

711
Visualizações
Why Do I get the error "integer literal is too large to be represented in any integer type" when assigning the maximum single point float value?

I know that according to the single point standard IEEE the maximum value of a float is 1.11111111111111111111111 *2^127 which converted in decimal is exactly this huge number -> 340282346638528859811704183484516925440.

How came that I get the error "integer literal is too large to be represented in any integer type" when trying to assign this value to a float like this :

int main(){

float biggest=340282346638528859811704183484516925440;

}

Shouldn't the compiler say "ok, this is the maximum value for a single float point number and I have to convert it to the 32bit value 01111111011111111111111111111111" where the first bit is the sign bit, the next eight bits represent the exponent and everything else the mantissa ?

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

0

When 340282346638528859811704183484516925440 appears in source code, without a . or other characters that would modify its type, it is an integer literal, as specified by C 2018 6.4.4.1, which calls it an integer constant. Formally, then, the compiler interprets it as an integer type. The value represented by this numeral is too large to represent in any integer type your compiler supports, so your compiler warns you about it.

The fact the value being assigned to a float is insufficient. The compiler must process the numeral itself before it has a value that it can convert to a float.

The preferred way to get the maximum finite float value is to include <float.h> with an #include directive and use FLT_MAX.

If you want to use the numeral, you can make it a floating-point constant by suffixing .. You can also suffix f to make it a float constant rather than double: 340282346638528859811704183484516925440.f.

The C standard allows some slack in how implementations parse floating-point constants, so it may not be guaranteed that the compiler produces the exact value the numeral represents, even if it is representable in the type. Good C implementations will. However, you can avoid this issue by using the hexadecimal floating-point form, which is guaranteed to produce the correctly rounded result if the C implementation uses a base-two floating-point format. In this form, the number is 0x1.fffffep127f.

over 4 years ago · Santiago Trujillo Relatório

0

As it does not have a decimal point nor an exponent, the number in your program is not parsed as a decimal floating point constant but as an integer constant and it does exceed the maximum value of all integer types available on your system. Your assumption about the compiler behavior is incorrect: the token type is determined from the syntax, not the context. Storing the value of an integer constant to a float involves a conversion to type float, performed at compile time or at run time.

To specify the number as a float constant, add a decimal point and an F suffix at the end:

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

If you just write 340282346638528859811704183484516925440. the constant will have type double and will be converted to type float when stored to biggest, which may or may not change the value.

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