Erreur relative en langage C
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Erreur relative en langage C



  1. #1
    Clem274

    Post Erreur relative en langage C


    ------

    Bonjour à tous,

    J'effectue un produit de deux matrices sur Matlab qui sont A et B à l'aide de la fonction Matlab donc en faisant juste (A*B). Le résultat est rangé dans la matrice C. Je récupère mes 3 matrices dans un fichier binaire que je viens lire sur un logiciel de programmation pour carte FPGA. Sur ce logiciel de programmation j'ai codé une fonction qui fait une multiplication de matrice. J'obtiens donc une nouvelle matrice C que je viens comparer avec mon modèle (Matlab). Cependant je remarque qu'il y a une différence sur mes deux résultats qui est très minime (sur Octave 439,497894 et en C j'ai 439,497803). Je fais une boucle qui compare le résultat donnée par la fonction Matlab et celui donné par ma fonction et je fais un printf quand sa correspond pas. On me demande donc de regarder l'erreur relative à 10^-6.

    J'ai pensé à calculer mon erreur relative dans ma boucle de cette façon : err_relative = (valeur_approchee - valeur_du_modele) / |valeur_du_modele|

    Cependant je trouve que des 0 pour mon erreur relative. Pouvez vous svp me donner une piste pour pouvoir comprendre ce que veux vraiment dire regarder l'erreur relative à 10^-6. L'objectif étant que mon compilateur qui compare ma valeur de mon modèle (Matlab) et celle calculée par ma fonction en C m'affiche pas une erreur pour un si tout petit écart.
    Merci à tous, bonne journée.

    -----

  2. #2
    umfred

    Re : Erreur relative en langage C

    pour moi, pour l'erreur relative, tu prends juste la valeur absolue de la différence entre les 2 valeurs, et tu regardes si c'est plus grand ou pas que 10^-6
    (tu as pris le même type de variable pour tes calculs?)

  3. #3
    Clem274

    Re : Erreur relative en langage C

    Ce sont des float et j'ai vu avec mon tuteur il m'a dit que c'était normal que j'obtienne des valeurs différentes. Mais du coup ta solution c'est de prendre l'erreur absolue et non pas la relative non ? Car lui m'a dit de regarder l'erreur relative à 10^-6 car on voyait que les 6 premiers chiffres étaient bons.

  4. #4
    Clem274

    Re : Erreur relative en langage C

    Il m'a aussi dit de ne pas prendre l'erreur absolue mais la relative mdr du coup c'est pour ça que je suis un peu perdu. Merci.

  5. A voir en vidéo sur Futura
  6. #5
    Paraboloide_Hyperbolique

    Re : Erreur relative en langage C

    Bonjour,

    Votre formule pour l'erreur relative est presque correcte: il manque la valeur absolue au numérateur:

    err_relative = |valeur_approchee - valeur_du_modele| / |valeur_du_modele|

    Avec les valeurs que vous donnez, j'obtiens une erreur relative d'environ 2.05e-05% entre octave et C (si octave est le modèle).

    Si vous effectuez le calcul d'erreur sous octave, vérifiez bien que le séparateur décimal pour les valeurs soit bien un point et non une virgule.

  7. #6
    Clem274

    Post Re : Erreur relative en langage C

    Merci pour votre aide. Je fais ma vérification et donc mon calcul d'erreur sur mon logiciel en C. J'ai codé la formule que vous m'avez donné. Cependant j'obtient un résultat bizarre. Mon code me renvoie "erreur" (dû à mon printf) alors que j'ai une erreur relative de 0, bizarre bizarre.

    Voyez vous une erreur bête dans mon code svp ? Merci.

    J'ai mis en pièces jointes mon code et le résultat de la console. Je précise que ptr_verif contient les données de la matrice C provenant d'Octave (donc le modèle) et ptr_c contient les données de la matrice C calculée avec ma fonction.

    Merci.
    Images attachées Images attachées

  8. #7
    JPL
    Responsable des forums

    Re : Erreur relative en langage C

    Le code ne doit pas être posté sous forme d’image mais comme un texte entouré des balises [Code]...[/Code].

    Merci.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  9. #8
    umfred

    Re : Erreur relative en langage C

    affiche le résultat de 10^-6 pour voir peut-être que ça ne donnera pas la bonne valeur

  10. #9
    polo974

    Re : Erreur relative en langage C

    Les valeurs données changent après le 7eme digit, donc on est en-dessous de 10-6
    (0.3 10-6)

    Pour info, les float en C sont sur 32 bits en ont environ 7 chiffres significatifs...
    Ce qui correspond à l'ordre de grandeur de l'erreur...

    Passer en double pour avoir environ 16 chiffres significatifs.
    Jusqu'ici tout va bien...

  11. #10
    polo974

    Re : Erreur relative en langage C

    Pour le printf, donner la précision voulue ou un autre format genre:
    printf ("%.7f", err)
    Ou %g

    Mais de toute façon le float est (presque) trop court...

    (Détail: Un seul abs (...) de tout le calcul suffit.)
    Jusqu'ici tout va bien...

  12. #11
    Clem274

    Re : Erreur relative en langage C

    Bonjour,

    Merci pour votre réponse. Mon tuteur m'a imposer de rester en float. Cependant il m'a aussi parlé de digit. Il m'a demandé de regarder l'erreur relative à 10^-6 au vu des résultats que j'obtenais.

    Par exemple si l'erreur entre mes deux nombres est au niveau du n-ième digit, je devrais regarder l'erreur relative à 10^(n) ? Car moi mon objectif final étant d'afficher "erreur" si la différence est supérieur à mon erreur relative. Sachant que c'est les nombres de mes matrices A que je génère aléatoirement (entre 0 et 100, ou 0 et 1000) qui vont influencer les résultats de la matrice C, qui contient les résultats que je compare avec les éléments de la matrice C obtenues avec ma fonction multiplication.

    Merci d'avance.

  13. #12
    polo974

    Re : Erreur relative en langage C

    je n'avais pas trop regardé le code
    10^-6 en C, c'est 10 xor -6, ce qui donne -16 ... au lieu de .000001

    il faut écrire 1e-6 ou .000001
    Jusqu'ici tout va bien...

  14. #13
    Clem274

    Re : Erreur relative en langage C

    C'est bon ce problème est résolu, j'ai utilisé la fonction pow(10,-6). Du coup pourriez vous m'aider svp sur mon questionnement en #11 ?

  15. #14
    Paraboloide_Hyperbolique

    Re : Erreur relative en langage C

    Pour comparer deux matrices, mettons pour celle obtenue avec Octave et pour celle obtenue en C, je recommande plutôt d'utiliser une norme matricielle*.

    *Voir https://fr.wikipedia.org/wiki/Norme_matricielle

    Par exemple, la norme de Frobenius est facile à calculer. Votre erreur relative, pour cette norme, entre les deux matrices sera alors:


  16. #15
    polo974

    Re : Erreur relative en langage C

    Attention, une somme de float fait perdre de la précision, genre (de mémoire) 1 demi bit pour chaque addition, donc 7 additions et hop un digit en moins.

    D'autres confirmeront ou infirmeront.

    Mais de toute façon comme il y a du carré dans l'air, il faut 2 fois plus de chiffres significatifs.

    Donc double...
    Jusqu'ici tout va bien...

  17. #16
    Paraboloide_Hyperbolique

    Re : Erreur relative en langage C

    Correct, j'avais zappé cet aspect lors de la rédaction de mon message.

Discussions similaires

  1. Calcul de l'erreur relative
    Par invite1e8ba3d0 dans le forum Physique
    Réponses: 1
    Dernier message: 08/01/2017, 06h35
  2. calcul d'erreur relative
    Par invitee9d0f7ec dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 15/11/2016, 19h29
  3. Exercice Erreur relative
    Par invite8802ea02 dans le forum Mathématiques du supérieur
    Réponses: 9
    Dernier message: 02/08/2016, 23h09
  4. Erreur relative altitude
    Par invite92d7368f dans le forum Physique
    Réponses: 2
    Dernier message: 24/03/2015, 13h56
  5. Erreur relative et Absolue
    Par invite9185431a dans le forum Physique
    Réponses: 3
    Dernier message: 18/03/2014, 15h51