IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Calcul en java


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 22
    Points
    22
    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 éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Je pense pas qu'il soit possible de faire grand chose hormis éviter de provoquer un dépassement.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Tu voudrais que ca fasse quoi, que ca reste à MIN_VALUE ?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    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 ).
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 22
    Points
    22
    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 éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 552
    Points : 15 463
    Points
    15 463
    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 chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    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 avec Java
    Réponses: 8
    Dernier message: 12/03/2015, 15h00
  2. Probleme de calcul Matlab Java
    Par Papypsyco dans le forum Général Java
    Réponses: 2
    Dernier message: 27/05/2014, 13h21
  3. Calcul union Java
    Par AI_LINUX dans le forum Général Java
    Réponses: 10
    Dernier message: 27/10/2011, 16h05
  4. Problème calcul simple JAVA
    Par absot dans le forum Général Java
    Réponses: 4
    Dernier message: 03/06/2010, 22h44
  5. calcul integrale java
    Par pepyto3 dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2007, 13h35

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