π
<-
Chat plein-écran
[^]

[Résolu] Problème de conversion int en C

Assembleur, Axe, C/C++, ICE...

[Résolu] Problème de conversion int en C

Message non lude Bobb » 28 Avr 2021, 18:15

Bonjour à tous,

Aujourd'hui j'ai un problème en C :

Je ne comprends pas pourquoi ce code :
Code: Tout sélectionner
#include <stdio.h>

int main()
{
    long double nombre1=414275475754765.6575685; /* création d'un nombre à virgule flottante*/

    int nombre2=nombre1; /* conversion de ce nombre en entier, dans la variable nombre2*/

    printf("%d\n",nombre2); /* affichage du nombre entier, ne donne pas ce que je voudrais, Pourquoi ?*/

    return 0;
}


Me donne ça :

Code: Tout sélectionner
-2147483648                                                                                                                         
                                                                                                                                     
                                                                                                                                     
...Program finished with exit code 0                                                                                                 
Press ENTER to exit console.


Le nombre flottant converti en entier devrait donner 414275475754765, alors qu'il me donne un nombre négatif complètement différent.

Pouvez-vous m'aider Anonymous ?
Dernière édition par Bobb le 28 Avr 2021, 18:43, édité 1 fois.

Tous mes programmes sont disponibles ici

↳ Testez mon simulateur Android sur Ti-83 Premium CE et / ou Édition Python
Jetez un coup d'oeil à mon langage de programmation interprété Neon.

Image
Avatar de l’utilisateur
BobbProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 94.5%
 
Messages: 300
Inscription: 19 Avr 2020, 12:37
Localisation: Morbihan
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: CPGE MPI

Re: Problème de conversion int en C

Message non lude Ti64CLi++ » 28 Avr 2021, 18:23

Parce que les int ne stockent pas les nombres de la même manière que les double/float. Donc la conversion ne peut marcher immediatement.
Un peu d'explication : https://fr.wikipedia.org/wiki/IEEE_754 ;)
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: Problème de conversion int en C

Message non lude Bobb » 28 Avr 2021, 18:28

Je n'ai pas trop compris et je ne vois pas ce que je dois faire pour convertir mon nombre sans ce problème.

Tous mes programmes sont disponibles ici

↳ Testez mon simulateur Android sur Ti-83 Premium CE et / ou Édition Python
Jetez un coup d'oeil à mon langage de programmation interprété Neon.

Image
Avatar de l’utilisateur
BobbProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 94.5%
 
Messages: 300
Inscription: 19 Avr 2020, 12:37
Localisation: Morbihan
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: CPGE MPI

Re: Problème de conversion int en C

Message non lude MateoConLechuga » 28 Avr 2021, 18:31

Code: Tout sélectionner
#include <stdio.h>

int main()
{
    long double nombre1=414275475754765.6575685;

    long int nombre2=nombre1;

    printf("%ld\n",nombre2);

    return 0;
}
Avatar de l’utilisateur
MateoConLechugaVIP++
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 60.5%
 
Messages: 50
Inscription: 12 Oct 2015, 21:56
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: mateoconlechuga

Re: Problème de conversion int en C

Message non lude jacobly » 28 Avr 2021, 18:31

The int type is typically restricted to the range [-2147483648,2147483647]. If you try to convert a float that is out of range for int to int, it is undefined behavior which means absolutely anything can happen. In actual implementations, the resulting value is often exactly -2147483648 or 2147483647.
Avatar de l’utilisateur
jacoblyVIP++
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 16%
 
Messages: 12
Inscription: 13 Oct 2016, 04:34
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: jacobly0

Re: Problème de conversion int en C

Message non lude Bobb » 28 Avr 2021, 18:36

Thank you very much, It works with a long int.

Tous mes programmes sont disponibles ici

↳ Testez mon simulateur Android sur Ti-83 Premium CE et / ou Édition Python
Jetez un coup d'oeil à mon langage de programmation interprété Neon.

Image
Avatar de l’utilisateur
BobbProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 94.5%
 
Messages: 300
Inscription: 19 Avr 2020, 12:37
Localisation: Morbihan
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: CPGE MPI

En ligne

Re: [Résolu] Problème de conversion int en C

Message non lude SlyVTT » 28 Avr 2021, 19:03

Hi,
anyhow, even if it works, it is generally considered not to be a good idea to use "implicit" conversion.
By far much better to say to the compiler that you are actually asking for a conversion :

Code: Tout sélectionner
// this is a dummy example, anyhow, it shows the concept
long double temp1 = 1165551515151.25156451;

// we use the On-the-Fly casting to long int.
long int temp2 = (long int) temp1;


What is important is the (long int) on the left side of the equal sign. It says to the compiler that you are asking for a conversion of the following member (temp1, whatever its type) into a long int type to feed into the temp2 variable.

I guess you should at least get a warning a compilation time without using casting.

Ciao

Sly
Dernière édition par SlyVTT le 28 Avr 2021, 19:12, édité 2 fois.
Some works in progress :
The GUI Toolkit NF for nSpireMyShmup for fxCG-50Magic Light for Casio Graph 90+E
and
Magic Light for nSpire CX/CX-II
Simple Text Editor for nSpireOutRun for Casio Graph 90+E
95%
50%
100%
75%
100%
And more to come ... stay tuned
Avatar de l’utilisateur
SlyVTTPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 43%
 
Messages: 482
Images: 31
Inscription: 19 Jan 2021, 09:41
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: SlyVTT

En ligne

Re: [Résolu] Problème de conversion int en C

Message non lude SlyVTT » 28 Avr 2021, 19:25

May I ask why ?

As we are in a type "degradation" situation, it is then risky not to explicitely ask for a cast.

If it was the opposite (i.e. int to long conversion) I would agree, but usual arithmetic conversion in C are safe only in the type upgrade situation, which means int --> unsigned int --> long --> unsigned long --> long long --> unsigned long long --> float --> double --> long double.

I am surprised of the "tolerance" of the compiler for the direct conversion, at least it should warn, the best would be to point an error cause there are loss of information in such implicit conversion.

Sly
Some works in progress :
The GUI Toolkit NF for nSpireMyShmup for fxCG-50Magic Light for Casio Graph 90+E
and
Magic Light for nSpire CX/CX-II
Simple Text Editor for nSpireOutRun for Casio Graph 90+E
95%
50%
100%
75%
100%
And more to come ... stay tuned
Avatar de l’utilisateur
SlyVTTPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 43%
 
Messages: 482
Images: 31
Inscription: 19 Jan 2021, 09:41
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: SlyVTT

En ligne

Re: [Résolu] Problème de conversion int en C

Message non lude SlyVTT » 28 Avr 2021, 19:28

Strange, the message I was answering to has just disappeared :comprends_po:
Some works in progress :
The GUI Toolkit NF for nSpireMyShmup for fxCG-50Magic Light for Casio Graph 90+E
and
Magic Light for nSpire CX/CX-II
Simple Text Editor for nSpireOutRun for Casio Graph 90+E
95%
50%
100%
75%
100%
And more to come ... stay tuned
Avatar de l’utilisateur
SlyVTTPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 43%
 
Messages: 482
Images: 31
Inscription: 19 Jan 2021, 09:41
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: SlyVTT

Re: [Résolu] Problème de conversion int en C

Message non lude jacobly » 28 Avr 2021, 20:12

How is int -> unsigned safe if it changes -1 to 4294967295? Even converting int to float loses information, albeit with a much smaller error. If you were to disable "unsafe" conversions in C, then that would break a whole bunch of things that you expect to work without thinking about it. Just a few examples that rely on "unsafe" implicit conversions to compile:
Code: Tout sélectionner
int x = 5;
float y = 12;
char a = (char)8 + (char)17;
Avatar de l’utilisateur
jacoblyVIP++
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 16%
 
Messages: 12
Inscription: 13 Oct 2016, 04:34
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: jacobly0

Suivante

Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 18 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1077 utilisateurs:
>1055 invités
>18 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)