[fortran] transtypage

bonjour.
Dans un programme fortran, j'utilise la fonction "atanh"
le problème c'est qu'elle renvoie n'importe quoi : atanh(x)=2.1...e-269
quelque soit x
x est un REAL*8, et je pense que le problème vien de la.
Je pense que si j'utilisait un real*4 ça tournerai.
problème je ne peux modifier x, il faudrai donc que je change le type de x.
Comment faire???
En "C" c'est simple :
double x;
atanh(float(x));
Merci de l'aide que vous pourrez m'aporter.
P.S. : la fonction datanh n'est pas prise en compte par le compilo (gcc)
--
Salutation !
Char Snipeur

3 réponses

  1. Salut,
    Pas de cast en fortran, le compilateur assure ça lors de l'affectation.
    Je dis ça vis à vis du seul fortran que j'ai pratiqué : le f77
    C Declaration
        REAL*8 x8, a, b
        REAL*4 x4
    C Calcul
        a=1.
        b=11.
        x8=a/b
    C changement de type
        x4=x8
    C resultat
        write(*,100) x8
        write(*,101) x4
    100 format ('REAL*8 x = ', D25.20 )
    101 format ('REAL*4 x = ', E25.20 )
        RETURN
        END   
    

    Ce qui donner le résultat suivant
    REAL*8 x = .90909090909090911614E-01
    REAL*4 x = .90909093618392944336E-01
    


    A+, crabs
    1. Contributeur
      ok. Merci Crabs, je vais essayer ta méthode.
      Mais lors de l'apel d'une fonction, il modifie aussi le type?
      si l'argument de tanh doit être un real*4 et que je le passe un real*8 il va convertir.
      Sinon, je pense que le fortran inclu dans gcc est bien du fortran 77.
      Merci encore.
      1. Salut,
        J'ai fait qu'un peu du fortran sur MicroSparc, UltraSparc et R4400, mais je
        crois me rappeler que la lib mathématique en f77 elle est en real*8 et que oui
        il fait les adaptations lors de l'appel.
        J'ai essayer sous mon linux de faire un atanh, mais la fonction n'est pas incluse
        dans le g77 :-(
        Enfin si un expert fortran passe par là, je suis preneur d'une infirmation ou
        confirmation sur le sujet...
        A+, crabs
    2. Salut, Essaie avec le type double x. Avec les recentes versions du compilateurs du Fortran f77, f90..., les "real" sont mal supportes, car j'·ai eu au passé ce type de problemes.