Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2007, 09h01   #21
Expert Confirmé
 
Avatar de natha
 
Inscription : janvier 2006
Messages : 2 345
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2006
Messages : 2 345
Points : 2 513
Points : 2 513
On peut discuter des calculs avec virgules alors aussi...
0.1 + 0.2 par exemple qui a une chance sur 3 de te donner autre chose que 0.3 ! Et je trouve super-pénible de devoir passer par des BigDecimal initialisés avec des objets de type String pour avoir un calcul correct.
__________________
Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
De la bonne manière de poser une question (et de répondre).
Je ne fais pas de service par MP. Merci (...de lire les règles...).
Ma page dvp.com
natha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 09h20   #22
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
C'est clair que sur les calculs en float, y a de quoi dire...
Dans tous les cas, personnellement, je trouve dommage que l'overflow ne provoque pas d'erreur. Comme dit dans l'un des post, pour retrouver l'erreur, bonjour le travail !
Et je ne pense pas qu'on puisse prévoir à l'avance tout ce qu'un utilisateur pourra saisir... Pire, il se trompe, mais ça passe quand même (en faussant les données au passage)

A+
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 12h14   #23
Membre régulier
 
Inscription : mai 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 116
Points : 96
Points : 96
Citation:
Tu prends déja le nombre de pixels d'un écran en 2560*1600 et tu arrives à plus de deux fois ce résultat.
ET LES MATHS là, 2560*1600 = environ 4 millions.
Un int peut contenir 2 puissance 32 soit environ 4300 millions.
Un long peut contenir 2 puissance 64 soit environ 18 millions de millions de millions.
Desoler mais ce n'est pas un ecran qui fera sortir des limites, à moins que celui ci ne recouvre Saturne, et encore.
Bien sur il ne faut pas prendre un byte ou un short pour faire les calculs
Et toc
openWorld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 12h43   #24
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Citation:
Envoyé par openWorld Voir le message
ET LES MATHS là, 2560*1600 = environ 4 millions.
Un int peut contenir 2 puissance 32 soit environ 4300 millions.
Un long peut contenir 2 puissance 64 soit environ 18 millions de millions de millions.
Desoler mais ce n'est pas un ecran qui fera sortir des limites, à moins que celui ci ne recouvre Saturne, et encore.
Bien sur il ne faut pas prendre un byte ou un short pour faire les calculs
Et toc
Faux.

La valeur max de int, c'est 2 puissance 31 moins 1, soit 2'147'483'647.

La preuve avec la javadoc :

Citation:
MAX_VALUE
A constant holding the maximum value an int can have, 2pow31-1
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 13h52   #25
Responsable IRC
 
Avatar de mavina
 
Homme Frédéric Mora
Développeur Java
Inscription : octobre 2004
Messages : 1 815
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Mora
Âge : 27
Localisation : Chine

Informations professionnelles :
Activité : Développeur Java
Secteur : Conseil

Informations forums :
Inscription : octobre 2004
Messages : 1 815
Points : 2 385
Points : 2 385
Envoyer un message via MSN à mavina Envoyer un message via Skype™ à mavina
Citation:
Envoyé par Baptiste Wicht Voir le message
Faux.

La valeur max de int, c'est 2 puissance 31 moins 1, soit 2'147'483'647.

La preuve avec la javadoc :
On est quand meme loin d'arriver à un overflow avec ton exemple
__________________
Développeur Java / Flex à Shanghai, Chine
mes publications
Mon dernier tutoriel : Messages Quit IRC : explications

La rubrique IRC recrute des redacteurs : contactez moi

Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]
mavina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 13h54   #26
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Citation:
Envoyé par Baptiste Wicht Voir le message
Faux.

La valeur max de int, c'est 2 puissance 31 moins 1, soit 2'147'483'647.

La preuve avec la javadoc :
Et oui, il faudrait avoir un unsigned int pour arriver aux 4 millions et plus...
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 14h17   #27
Rédacteur/Modérateur
 
Avatar de millie
 
Inscription : juin 2006
Messages : 6 929
Détails du profil
Informations personnelles :
Localisation : Luxembourg

Informations forums :
Inscription : juin 2006
Messages : 6 929
Points : 6 714
Points : 6 714
Pour les histoires de performances, ce serait au moins sympathiques qu'il existe une option de la JVM pour lancer des exceptions d'overflow en cas d'overflow...

Si le bug est reproductible, il serait alors possible d'activer cette option pour repérer plus rapidement l'erreur (quitte à avoir une application 10 fois plus lente en environnement de test pour débugger ce type de problème).
__________________
Je ne répondrai à aucune question technique en privé
millie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 14h35   #28
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Citation:
Envoyé par millie Voir le message
Pour les histoires de performances, ce serait au moins sympathiques qu'il existe une option de la JVM pour lancer des exceptions d'overflow en cas d'overflow...
Je trouve qu'il serait plus intéressant qu'un overflow soit systématiquement une erreur, le cas inverse me semble plus anecdotique...
Dans tous les cas, l'option de la jvm ne me semble pas bonne, il faudrait déjà savoir qu'on est en présence d'un problème lié à l'overflow pour le corriger.

Quel sont les cas où l'overflow serait utilile ? Moi, j'en vois pas
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h07   #29
Rédacteur/Modérateur
 
Avatar de millie
 
Inscription : juin 2006
Messages : 6 929
Détails du profil
Informations personnelles :
Localisation : Luxembourg

Informations forums :
Inscription : juin 2006
Messages : 6 929
Points : 6 714
Points : 6 714
Citation:
Envoyé par OButterlin Voir le message
Dans tous les cas, l'option de la jvm ne me semble pas bonne, il faudrait déjà savoir qu'on est en présence d'un problème lié à l'overflow pour le corriger.
Il suffirait en cas de problème non habituel de lancer la JVM en mode test qui regrouperait un ensemble d'option du type "tester les overflow".

Evidemment, il est plus intéressant qu'un overflow soit tout le temps détecté, mais as tu une idée de la dégradation des performances que cela engendre ? (moi non, mais si tu me dis que ça change rien alors c'est sûr que c'est mieux que ce soit tout le temps présent )
__________________
Je ne répondrai à aucune question technique en privé
millie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h12   #30
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Citation:
Envoyé par millie Voir le message
Evidemment, il est plus intéressant qu'un overflow soit tout le temps détecté, mais as tu une idée de la dégradation des performances que cela engendre ? (moi non, mais si tu me dis que ça change rien alors c'est sûr que c'est mieux que ce soit tout le temps présent )
ben pour être franc, j'en sais rien du tout... j'imagine que ça ne devrait pas être la lune, mais d'un autre côté, s'ils ne l'ont pas fait, il est possible que si
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h14   #31
Membre régulier
 
Inscription : mai 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 116
Points : 96
Points : 96
Baptiste Wicht oui je parlais en unsigned. Tu m'en voudras pas si ya une d'un coefficent 2. T'a fait une erreur d'un coefficient 8000 : hihihi
Menfin aucune importance
openWorld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 18h03   #32
Membre Expert
 
Avatar de Deadpool
 
Homme
Inscription : novembre 2005
Messages : 1 187
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : novembre 2005
Messages : 1 187
Points : 1 389
Points : 1 389
Et si on allait voir ce que font les concurrents?

En C# en l'occurrence, les overflows sont très bien gérés. Une exception est lancée en cas de dépassement de capacité lors d'une opération arithmétique ou d'un cast.

Il est ainsi possible d'activer ou de désactiver la vérification du dépassement de capacité d'une opération arithmétique particulière ou d'un cast via les 2 mot clés spécifiques checked et unchecked.

Petit exemple d'utilisation (tiré de la msdn):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
//code c#
        short x = 32767;   // Max short value
        short y = 32767;
        int z = 0;
        try
        {
            z = checked((short)(x + y));
            Console.WriteLine(z);
        }
        catch (System.OverflowException e)
        {
            Console.WriteLine(e.ToString()); //dépassement de capacité, on entre dans le catch, z ne sera jamais affiché
        }
Enfin, il existe une option particulière du compilateur c# (csc de son petit nom) qui permet également d'activer ou non la vérification du dépassement de capacité pour toutes les opération arithmétique pour lequelle il n'a pas été spécifié de mot clé checked ou unchecked, c'est l'option /checked.

Ca doit bien être faisable en Java, non?


Edit : j'ai oublié de préciser, par défaut (pas de mot clé checked ou unchecked mis devant une opération, option checked du compilo non utilisée), C# ne contrôle pas les dépassement de capacité (mode unchecked donc).
__________________
We are facing a dangerous period ahead. If we do not stop, correct and change some of these wrongdoings, now, we are all going to suffer. Either things that we make will overtake us, or nature will take over. Earthquake, flood, rain, severe drought, severe winter, lightning destruction, great wind destruction; These things will warn us that we are not following the law of the great spirit.

Extrait du documentaire Broken Rainbow (1985)
Deadpool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 17h32   #33
Membre régulier
 
Inscription : février 2007
Messages : 147
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 147
Points : 80
Points : 80
Je ne connais pas la norme IEEE 754. Je vais quand même essayer de faire avancer le débat.

Within an FP-strict expression, all intermediate values must be elements of the float value set or the double value set, implying that the results of all FP-strict expressions must be those predicted by IEEE 754 arithmetic on operands represented using single and double formats. Within an expression that is not FP-strict, some leeway is granted for an implementation to use an extended exponent range to represent intermediate results; the net effect, roughly speaking, is that a calculation might produce “the correct answer” in situations where exclusive use of the float value set or double value set might result in overflow or underflow.

JLS3 §15.4
LGnord est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 10h21   #34
Expert Confirmé
 
Avatar de Uther
 
Homme
Inscription : avril 2002
Messages : 2 299
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 2 299
Points : 3 961
Points : 3 961
Citation:
Quel sont les cas où l'overflow serait utilile ? Moi, j'en vois pas
Ca m'a déjà été utile quelques fois, même si c'est vrai que ça ne sert pas tous les jours et à tout le monde. On peut l'utiliser par exemple faire un checksum basique:
Code :
1
2
int checksum=0;
for(int i=0; i<byteArrayToCheck.length; i++) checksum += byteArrayToCheck[i];
Ceci dit, un comportement comme celui du C# serait préférable:
- Une option à la ligne de commande pour activer/désactiver la vérification(désactivé par défaut pour la compatibilité, même si je trouverai plus sur que ce soit activé par défaut),
- Tout en conservant la possibilité de spécifier individuellement le comportement des variables dont on attend un comportement particulier, comme la variable checksum de mon exemple.
Uther est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h30.


 
 
 
 
Partenaires

Hébergement Web