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

 Delphi Discussion :

probleme avec la fonction Ln(x)


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Points : 17
    Points
    17
    Par défaut probleme avec la fonction Ln(x)
    en fait, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x1:=ln(1);
    showmessage(x1);
    ==) la j'aurai un zero, par contre quand je fais:
    ==) la j'aurai une erreur: "division par zéro en virgule flottante";
    alors que dois-je faire pour surpasser ce problème?

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    showmessage(floattostr(ln(1)));
    il n'y a pas de soucis ?

    x est bien un extended ?

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 348
    Points : 3 127
    Points
    3 127
    Par défaut
    Bonjour,

    ton erreur ne doit pas venir de là. Est ce que tu déclares bien x et x1 en Real ?

    le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Var
        x, x1 : Real ;
    begin
       x := 1 ;
       x1 := ln(x) ;
       Showmessage(FloatToStr(x1)) ;
    fonctionne bien

    A+
    Charly

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Real ?! On n'utilise plus ça depuis Delphi 2. Il faut utiliser Double ou Extended (à la limite Single, mais ça ne sert plus à grand chose non plus).
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 348
    Points : 3 127
    Points
    3 127
    Par défaut
    Bonjour sjrd,

    Real c'est un type générique qui est équivalent actuellement à Double ?

    dans ma version de Delphi (Delphi7) les arguments des fonctions mathématiques sont déclarées en Real ?

    Est ce que le fait d'utiliser un type générique ne permet pas dévoluer facilement en fonction des capacités toujours plus grandes de ce type de variable ?

    PS : je ne suis pas du tout un pro ...

    A+

    Charly

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Le type générique Real est effectivement interprété par défaut comme un Double (codé sur 8 octets).

    Ce type a été conservé pour des raisons de compatibilité ascendante avec le précédent type Real (Real48 codé lui sur 6 octets)
    Il s'utilise conjointement avec la directive {$REALCOMPATIBILTY} pour que le type générique Real soit interprété comme un Real48.

    Aujourd'hui ce type est abandonné et son utilisation déconseillée, comme le souligne sjrd.

    Tu peux très bien, sous D7, utiliser un type Double ou Extended avec la fonction Ln (et autres fonctions de Math).

    @+ Claudius.

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 348
    Points : 3 127
    Points
    3 127
    Par défaut
    OK, merci à tous les 2, je vais évoluer sur ce point.

    le Pb : il faut que je transforme tous mes codes

    A+

    Charly

  8. #8
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    conseil d'utilisation :

    real -> double (cause real = real48 voir recommandations faites)

    single -> pour les performances et calcul pour graphismes (OpenGL, DirectX, GDI+).

    integer -> LongInt (cause integer = 16 bit sous TP, TPW et certaines versions de FPC)

    cardinal -> LongWord (cause cardinal = 16 bit sous certains compilateurs)
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 348
    Points : 3 127
    Points
    3 127
    Par défaut
    Merci Dr.Who

    Je pense que BigMonstre peut fermer son topic, car il avait simplement un Pb de nombre négaitif avec la fonction ln

    A+

    Charly

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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