Discussion: Calcul en java

  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 28
    Points : 10
    Points
    10

    Par défaut Calcul en java

    Bonjour je rencontre un petit problème que je ne sais résoudre ...

    Context :
    Je fais du calcul à l'aide de matrice (Programmation dynamique).

    Je souhaite utiliser le type primitif int et lors du calcul des valeurs des cellules de mes matrices je suis amener a faire des calculs du type :

    Valeur d'une cellule * constante

    Or lors de l'initialisation de mes matrices certaines cellules ont la valeur Integer.MIN_VALUE;

    Problème
    J'ai remarqué un comportement gênant qui peut être mis en avant par l'exemple ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		int x,y,z;
    		x = Integer.MIN_VALUE;
    		y = Integer.MIN_VALUE - 1;
    		z = Integer.MIN_VALUE - 2;
     
    		System.out.println(x+"\n"+y+"\n"+z);
     
    		//Resultat
    		// -2147483648
    		// 2147483647
    		// 2147483646
    Je souhaite conserver l'utilisation des int par soucis de performance (multiples grosses matrices), une solution pour pallier à ce problème ?
    En vous souhaitant une bonne fin de journée, merci d'avance.

  2. #2
    Expert Confirmé Sénior
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    novembre 2005
    Messages
    2 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : novembre 2005
    Messages : 2 784
    Points : 7 114
    Points
    7 114

    Par défaut

    Je pense pas qu'il soit possible de faire grand chose hormis éviter de provoquer un dépassement.

  3. #3
    Membre éclairé
    Inscrit en
    juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 570
    Points : 312
    Points
    312

    Par défaut

    Tu voudrais que ca fasse quoi, que ca reste à MIN_VALUE ?

  4. #4
    Expert Confirmé Sénior

    Inscrit en
    août 2006
    Messages
    3 618
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 618
    Points : 4 743
    Points
    4 743

    Par défaut

    Bie,

    Il est pour le moins curieux de vouloir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		y = Integer.MIN_VALUE - 1;
    et de s'étonner ensuite d'un comportement "inattendu" (alors que bien entendu, ce comportement est parfaitement prévisible).

    C'est un peu comme si tu voulais qu'un récipient sois plus vide que vide (sauf que le récipient ne va pas se remplir ).
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  5. #5
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Sauf que les récipient ne va pas se remplir... passons

    Pour ce qui est du pourquoi, imagine une fonction générique qui a pour but de renseigner les valeurs de chacune des cellules de mes matrices. Imagine ensuite une initialisation de certaines cellules à une valeur minimale, de façon à ce que lors d'une phase de backtracking on puisse éviter de définir un chemin comme passant par certaines cellules (en recherchant le max des valeurs lors de chaque déplacement).
    L'algorithme de NeedleMan & Wunsch sous fonction affine nécessite la mise en place d'une telle approche si l'on part dans une optique de maximisation de score (alignement de séquences).

    Résumons, avant la modification de la valeur d'une cellule faut-il que je m'assure que la valeur de la cellule à partir de laquelle je me base ne soit pas égale à la valeur Min (ajout d'une conditionnelle...) ou existe il une alternative pour le type int primitif.

    A noter que ce problème n'est pas rencontré lors de l'utilisation du type double primitif.

    Merci pour vos réponses.

  6. #6
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 178
    Points : 7 033
    Points
    7 033

    Par défaut

    Détecter a postériori un dépassement sur une soustraction est facile.
    La question est: que veux tu faire lorsque cela arrive, vu que tu ne peux pas avoir plus petit que Integer.MIN_VALUE?

  7. #7
    Membre Expert
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    novembre 2005
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2005
    Messages : 1 289
    Points : 1 796
    Points
    1 796

    Par défaut

    Citation Envoyé par Vantrax Voir le message
    Sauf que les récipient ne va pas se remplir... passons

    Pour ce qui est du pourquoi, imagine une fonction générique qui a pour but de renseigner les valeurs de chacune des cellules de mes matrices. Imagine ensuite une initialisation de certaines cellules à une valeur minimale, de façon à ce que lors d'une phase de backtracking on puisse éviter de définir un chemin comme passant par certaines cellules (en recherchant le max des valeurs lors de chaque déplacement).
    L'algorithme de NeedleMan & Wunsch sous fonction affine nécessite la mise en place d'une telle approche si l'on part dans une optique de maximisation de score (alignement de séquences).

    Résumons, avant la modification de la valeur d'une cellule faut-il que je m'assure que la valeur de la cellule à partir de laquelle je me base ne soit pas égale à la valeur Min (ajout d'une conditionnelle...) ou existe il une alternative pour le type int primitif.

    A noter que ce problème n'est pas rencontré lors de l'utilisation du type double primitif.

    Merci pour vos réponses.
    Malheureusement je crois que tu n'as pas le choix, les overflows numériques n'étant pas vérifiés en Java.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

Discussions similaires

  1. Calcul Formel Java
    Par xzibit15 dans le forum Débuter
    Réponses: 8
    Dernier message: 12/03/2015, 14h00
  2. Probleme de calcul Matlab Java
    Par Papypsyco dans le forum Général Java
    Réponses: 2
    Dernier message: 27/05/2014, 12h21
  3. Calcul union Java
    Par AI_LINUX dans le forum Général Java
    Réponses: 10
    Dernier message: 27/10/2011, 15h05
  4. Problème calcul simple JAVA
    Par absot dans le forum Général Java
    Réponses: 4
    Dernier message: 03/06/2010, 21h44
  5. calcul integrale java
    Par pepyto3 dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2007, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo