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

Lazarus Pascal Discussion :

Fonction INT : résultat bizarre [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2003
    Messages : 30
    Par défaut Fonction INT : résultat bizarre
    Bonjour,
    sur un pgm, j'utilise la "fonction int" pour récupérer la partie entière d'une division.

    dalkey:= floattostr(int(latact/maxsize))
    + '_' + floattostr(int(lonact/maxsize));
    avec latact de type single, maxsize de type longint.

    maxsize est constante de 230;
    pour latact de -4, la fonction me renvoie -0 au lieu de -1
    pour latact de 231, la fonction me renvoie 1

    Avez-vous une idée ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour obtenir le "bon" résultat, peut-être employer la fonction floor de l'unit math par exemple (Floor function returns the smallest near integer number).

    Cordialement. Gilles

  3. #3
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2003
    Messages : 30
    Par défaut
    Ca marche.

    J'ai fait un 1 pour garder une coherence dans mon petit programme.

    Merci Selzig.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est curieux en effet cette erreur dans int. Mais je n'arrive pas à suivre la piste... On va aller faire un petit tour du côté du forum Free Pascal http://www.developpez.net/forums/d99...s/#post5577260...

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

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Par défaut
    Ce n'est pas une erreur, la fonction int, n'est pas la fonction partie entière. Elle renvoie en principe le nombre sans sa partie décimale. Donc int(-1.5) doit donner normalement -1, alors que la partie entière de -1.5 c'est -2.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui, oui...

    "On" a compris... Mais avouez que sa description dans le wiki correspond exactement à celle d'une partie entière... outre le fait que le terme employé ajoute à la confusion... Enfin, c'est surtout sa description qui prête à cette dernière...

    Je n'ai pas l'habitude d'employer int (mais floor qui appartient à l'unité math)... Mais je n'avais jamais remarqué que int avait cette particularité... Et franchement, si je cherchais cette fonction, j'aurais saisi "int" dans un moteur de recherche ou "delphi partie entière" dans ce cher Google...

    Site 1 proposé : http://info.sio2.be/delphi/3/7.php... : "Fonctions mathématiques : int(valeur) Renvoie la partie entière d'un nombre réel. "

    Site 2 proposé : http://mgc99.free.fr/Delphi1.html : "Routines arithmétiques : Int Renvoie la partie entière de l'argument."

    Je continue ? Il y a confusion et elle est normale compte tenu de la terminologie employée... et il faut utiliser un réel négatif pour se rendre compte du "problème"...

    Chez les anglo-saxons... C'est un peu plus précis parfois quand on trouve une note : "The Trunc function does the same, but returns the integer in an Integer value." Mais la confusion est également importante... A moins que le terme mathématique "partie" entière ait une autre traduction que "integer part". Je demanderai demain à mon collègue d'Anglais.

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

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Par défaut
    Cela prouve que les auteurs (ou les traducteurs!) ont des lacunes mathématiques et que par conséquent ces pages ne sont pas fiables puisque écrites par des amateurs qui parlent sans savoir ou qui recopient les uns sur les autres sans vérifier. C'est d'ailleurs un problème qui n'est pas rare en programmation: il faut un vrai bagage mathématique, tous ceux qui font du graphisme, et notamment de la 3D le savent bien! Et c'est pour cela que trouver sur le net des documents clairs et fiables est quasiment impossible.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Dans le cas présent, je suggèrerais plutôt une lacune linguistique... (my broken english)... Mais bon, il me semble quand même - je vais m'en prendre plein la tête demain quand ma collègue lira le forum - que l'anglais est moins précis que ce très cher français... et donc dans ce cas précis, à moins qu'il y ait une formulation anglo-saxone particulière de partie entière (au sens mathématique)... il n'y a pas grand chose à reprocher à ceux qui font la confusion... D'autant -si j'ai bien traduit - qu'il existe une fonction (Trunc) pour faire cela... qui porte bien son nom et qui fait bien ce qu'elle indique (cf ci-dessus)... Il faut reconnaître quand "c'est mal foutu"... même quand c'est du Pascal !

    En tous cas, notre langue ne semble pas être un obstacle à l'obtention des médailles Fields par nos représentants [http://www.futura-sciences.com/fr/ne...s-2010_24846/] ...

    Bonne soirée.
    Cordialement. Gilles
    Dernière modification par Invité ; 08/11/2010 à 18h59.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Par défaut
    Il est certain que trunc est plus approprié, d'autant plus que la fonction trunc renvoie un entier, mais pas la fonction int!

  10. #10
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2003
    Messages : 30
    Par défaut
    Quel debat!

    Comme le souligne Selzig, la fonction int est bien la partie entière pour de nombreux langages (Delphi, Excel....) et la traduction de free pascal est un "peu légère".

    Ne nous en formalisons pas, et puisque Floor rend le service, on va continuer gentiment avec ces petites bizarreries....

    (mais j'aimerais bien vers une conversion de projet delphi utilisant int pour voir....)

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Par défaut
    C'est marrant mais ici ils décrivent la fonction int de delphi et elle semble se comporter comme celle de freepascal. Et dans ma doc "turbo pascal reference guide" ils décrivent aussi la même chose. Bref, sauf si ces documentations sont fausses, on dirait que cette fonction se comporte comme ça depuis au moins 15 ans...

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Par défaut
    Le débat remonte à bien avant 15 ans, puisqu'il y avait le même au sujet des calculatrices et de la touche int.

    Pour tous les mathématiciens du monde la fonction partie entière s'appelle floor, informatique ou pas, c'est standard! Il en existe une autre qui répond au nom de ceil (standard également) et qui représente le plus petit entier supérieur ou égal à.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour M. Mittag,

    Restons sérieux voulez-vous ?

    Citation Envoyé par mittag Voir le message
    Pour tous les mathématiciens du monde la fonction partie entière s'appelle floor, informatique ou pas, c'est standard! .
    Gauss introduced the square bracket notation [x] for the floor function in his third proof of quadratic reciprocity (1808).[2] This remained the standard[3] in mathematics until Iverson introduced the names "floor" and "ceiling" and the corresponding notations x and x in his 1962 book A Programming Language.[4][5] Both notations are now used in mathematics; this article follows Iverson.[6]
    http://en.wikipedia.org/wiki/Floor_a...ling_functions
    Evidemment, ceci n'est pas une "preuve" d'autant que je sais bien que pour vous, Internet est une source de documentation non fiable... et que visiblement, comme une part de mes Lycéens, avant leur naissance (ou avant 1962), seuls les dinosaures peuplaient la planète... à moins que cela ne soit l'époque du "Néant" ? Bon j'exagère ce petit "défaut". Disons que l'Histoire est floue et que de ce fait, il est diificile de s'appuyer dessus. C'est pour cela que je me permets de faire le parallèle avec votre affirmation. Par ailleurs, je leur reconnais volontiers plein de qualités que je ne possède pas... Mais en 1962, l'informatique balbutiait... et "quelques" générations de mathématiciens s'étaient succédées, avaient déjà défini ce qu'est une partie entière dans leur langue... A cette époque, je parierais bien que l'anglais n'existait pas . Avez-vous remarqué que les mathématiciens utilisent de vieux codes, des lettres d'alphabets inusitées (le grec ancien), des mots latins (http://trucsmaths.free.fr/etymologie.htm) ?

    Autre précision : les "mathématiciens et informaticiens" ("les mathématiciens [...] informatique ou pas") forment non pas un seul ensemble mais 2 ensembles qui sont encore très souvent disjoints... Je ne rentrerai pas dans ce débat-là : chez moi, cela cohabite en harmonie... ou presque... Vous me permettrez de confirmer mon "sentiment même si depuis 15 ans je suis "has been" :
    1. La définition de int dans le wiki Lazarus peut être assimilée à celle de la partie entière qui est un concept mathématique.
    2. A ce titre, suivant la formation du lecteur, soit le résultat est erroné, soit on se contente d'affirmer que cela peut prêter à confusion... même si depuis 15 ans...
    3. Utiliser un code dont la description est celle d'une définition mathématique mais qui à son regard fournit un résultat erronné est au moins une maladresse des concepteurs du langage...
    4. Alors, en tant qu'informaticien, je m'adapte évidemment: j'ai découvert (grâce à Alea46) -bien qu'utilisant Pascal depuis de nombreuses années [mais pas la fonction int, comme je l'ai déjà expliqué]- que system.int(-12.75) = -12 alors que [-12.75] ou E(-12.75) = -13...
    ...et pour éviter les ennuis, on utilise au maximum les fonctions de l'unit math qui à priori ont été réalisées par le meilleur des 2 "ensembles"... et pour cela (faire des maths...).

    Bonne journée.
    Cordialement. Gilles
    Dernière modification par Invité ; 10/11/2010 à 19h45.

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Par défaut
    Je ne vois pas ou vous voulez en venir. Votre lien confirme ce que je disais (floor et ceil) et ce que vous dites en fin de message aussi: int n'est pas la partie entière, d'autant plus que cette fonction renvoie un réel.

    Le dialogue tourne en rond, alors j'en reste là.

  15. #15
    Invité
    Invité(e)
    Par défaut
    OK

    "Puisqu'on est d'accord"... Non, nous ne le sommes que sur l'obligation de l'utiliser telle qu'elle est (la fonction int)... Mais j'entends bien votre volonté d'arrêter.

    Bonne journée.
    Cordialement. Gilles
    Dernière modification par Invité ; 10/11/2010 à 10h16.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat bizarre d'une fonction numérique simple
    Par feynman dans le forum Fortran
    Réponses: 9
    Dernier message: 19/11/2007, 22h07
  2. Réponses: 5
    Dernier message: 12/02/2006, 22h00
  3. Comment avoir une fonction à deux résultats ?
    Par xenos dans le forum Langage
    Réponses: 9
    Dernier message: 02/10/2005, 10h32
  4. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22
  5. [Débutant][Math] float int arondi bizarre
    Par yolepro dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 27/04/2004, 10h01

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