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

Free Pascal Discussion :

[2.4.3] Où se trouve le code de la fonction int dans les sources


Sujet :

Free Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut [2.4.3] Où se trouve le code de la fonction int dans les sources
    Bonjour,

    Signalé par sur le forum par Alea46 [http://www.developpez.net/forums/d99...ultat-bizarre/], la fonction int est buggée : int(-12.75) renvoie -12 alors que la réponse est -13. La fonction floor de l'unit math renvoie le résultat correct.

    Je me suis demandé où était le problème. Je comprends mal : c'est un import d'une bib. C ? Je n'arrive pas bien à suivre la piste... Le code de cette fonction int est où ?

    Cordialement. Gilles

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    1 - Je pense que c'est une fonction intrinsèque du compilateur. Elle n'a pas vraiment de source. Quand le compilateur rencontre un appel à Int il insère directement les instructions assembleur équivalentes.

    2 - Elle n'est pas buggée. Le résultat que vous décrivez est normal. La fonction Int se contente d'éliminer tout ce qui est après la virgule. Si vous souhaiter arrondir à l'entier le plus proche c'est round qu'il faut utiliser.

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    google

    et donc la partie entière de -12.72 est bien -12

  4. #4
    Invité
    Invité(e)
    Par défaut
    Hum... C'est une explication "d'Informaticien pur et dur" qui avait échappé à mon prisme... après passage duquel il s'agirait plutôt d'une vulgarisation toute "informaticienne" d'une fonction mathématique. Alea46, comme moi, avions oublié de changer de casquettes... Scusez-nous !

    Alors pour s'amuser... et uniquement pour cela, je garde ma première casquette... et muni de cet indispensable instrument (la casquette), je "dérive" un peu...

    Et je relis l'explication... et, donc, je me demande quid du lien avec la définition de la partie entière en maths ? Tout comme en Français, en anglais, les mots en un sens.

    Description : Int returns the integer part of any Real X, as a Real.

    Il est bien marqué "integer part" ? Or même chez les anglo-saxons... http://www.highbeam.com/doc/1O82-integerpart.html...

    You see the example ? "[...] notice that [−9/4] = −3". Même nos amis Anglais sont d'accord.

    Donc, notre system.int(), c'est (serait) simplement un traitement de chaines : on enlève tout ce qu'il y a derrière la virgule (un truncate)... Ceci expliquerait pourquoi la fonction Int n'appartient pas à l'unit math mais à system... Cela doit être cela la subtilité... Et ce serait une évidence qui naturellement s'imposerait ?

    Repartons de vieilles certitudes : extraire la partie entière d'un nombre, c'est des mathématiques. C'est de la "haute technologie" : c'est précis, concis, efficace, formidable... Là, c'est de la promo... Scusez encore, je m'égare... C'est donc cette terminologie et son concept associé qui devraient s'imposer en la matière... Je ne vais pas refaire le monde, ni la terminologie informatique... Mais, à mon sens (ie dans mon prisme), System.Int() n'est pas plus "Raisonnable" que d'exprimer son poids en kilogrammes... Alors ?

    La clef réside peut-être dans cette vieille discussion sur un de nos forums [http://www.developpez.net/forums/d90...e-developpeur/ ] : faut-il avoir fait des maths (ou en faire) pour être un bon développeur ? je n'avais pas de réponse et je me méfiais de mon parti pris. Naïvement, j'aurais répondu OUI (...et même sans être développeur d'ailleurs). Maintenant, je suis un peu embarassé mais pragmatique : une exception invalide une prétendue règle. Donc, non... si vous voulez utiliser la fonction Int... : et ce serait même un handicap... en certaines circonstances .

    Ce qui me semble quand même une conclusion fort improbable notamment historiquement.. On continue un peu le raisonnement informaticomatheux ? une in(t)epsie implique d'autres inepties... En utilisant un raisonnement par l'absurde... on en arrive à la conclusion que le system.int l'est... (absurde). Ouf... Comme quoi, les maths cela peut servir en informatique... CQFD !


    Bon, c'est un peu tiré par les cheveux -d'où la présence indispensable de la casquette-, alors pour concilier les "us et coutumes du moment" (l'informaticien) et les "résultats attendus" (le matheux), dès qu'on fait des maths avec Lazarus (et d'autres), il est préférable d'utiliser les fonctions des units spécialisées (math)... Là au moins, on parle le même langage (and language)... Dans ce cas, on a une certitude (enfin j'espère) : on parle de la même chose.

    Cordialement. Gilles
    Dernière modification par Invité ; 08/11/2010 à 15h25.

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    je pense que c'est lié à l'instruction FISTP (Store integer and pop) du FPU...à vérifier

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    google

    et donc la partie entière de -12.72 est bien -12
    C'est donc juste un problème de traduction. C'est donc pas la fonction E(X).
    Cette article de wikipedia montre bien la difference : http://fr.wikipedia.org/wiki/Partie_..._fractionnaire

Discussions similaires

  1. Où se trouve le code de ma fonction ?
    Par alfazzz dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 20/03/2013, 18h16
  2. Nouvelle vogue dans les sources : le code <!--[if IE 7 ]>
    Par okoweb dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 10/08/2011, 14h17
  3. code extérieur au fonction valable dans tous le GUI?
    Par jponsoda dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 25/06/2010, 13h55
  4. Réponses: 11
    Dernier message: 05/02/2008, 13h10
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h04

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