|
Bas de page | |
---|---|
Auteur | Sujet : calcul à virgule fixe, résolution et interpolation linéaire |
rat de combat attention rongeur méchant! | Bonjour les mathématiciens, programmeurs et mathématiciens programmeurs ,
|
Publicité | Posté le 13-12-2020 à 16:19:49 |
rufo Pas me confondre avec Lycos! | Et si tu multiplies toutes les valeurs en entrée par 100 et tu castes en int pour supprimer l'éventuelle virgule derrière ?
--------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
rufo Pas me confondre avec Lycos! | Je le ferais en plusieurs étapes car t'es pas à l'abri d'opti du compilo.
--------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
rat de combat attention rongeur méchant! | Ah oui, l'optimisation, en effet, ça pourrait être un soucis dans ce code test. Bien vu. Je vais regarder. |
rat de combat attention rongeur méchant! | Bon, pour tester j'ai mis toutes les valeurs en variable globale volatile int64_t ce qui devrait éviter toute optimisation(??), mais le résultat est n'importe quoi, même si on oublie la virgule. Le soucis c'est que "a" est toujours 0. Le code modifié au cas où quelqu'un y vois une erreur de ma part...
edit: J'ai d'autres formules où un *100 était en effet suffisant au bon endroit car on ne fait que diviser par une puissance de 2, mais là avec cette interpolation j'ai du mal. Message édité par rat de combat le 14-12-2020 à 19:56:33 |
rufo Pas me confondre avec Lycos! | Si tes constantes de calibration sont connues, pourquoi tu ne mets pas dans les coeffs a et b les valeurs déjà calculées. Ainsi, t'auras plus qu'à faire le calcul d'interpolation avec la valeur relevée.
--------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
rat de combat attention rongeur méchant! |
C'est vrai. Le soucis c'est que ces coeffs sont/peuvent être différents pour chaque exemplaire du capteur et je risque d'en avoir plusieurs, du coup ça serait bien si le Master qui dirige tout le bazar à la fin (un µC) peut faire les calculs de a et b pour chaque capteur en automatique. Après je pourrais faire ça une fois à la main pour chaque capteur aussi et si je m'en sors pas ça sera ça, mais bon, c'est aussi pour comprendre...
Je ne suis pas sûr d'avoir compris... Quel temps? Le capteur est un capteur de température, il me sort une valeur ADC brute que je veux transformer en °C en utilisant une interpolation linéaire avec ces fameuses constantes à calculer.
|
rufo Pas me confondre avec Lycos! | Ce ne sont que les valeurs Tx_degC_x8 qu'il faut x100 (donc les valeurs de l'axe des Y), pas les valeurs du dénominateur.
--------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
rat de combat attention rongeur méchant! | Les températures sont stockées x8 dans la mémoire de la puce - et en effet, il faut le prendre en compte ce que j'avais un peu oublié. Voilà le code test actuel:
Sauf que la précision n'y est pas encore: Je retrouve 24,23°C alors qu'il faudrait trouver 23,79°C. Certes, la différence n'est pas énorme, mais c'est justement le point clé: Pour avoir deux décimales correctes il ne suffit PAS de multiplier certaines valeurs en entrée par 10**2. Par tâtonnement je trouve qu'il faut multiplier par 10**4 plutôt, mais pourquoi? J'aimerai bien comprendre, si ce n'est pour ma culture générale. Il doit bien y avoir un tas de formules qui permettent de comprendre/calculer ces facteurs précisément en fonction de la précision souhaitée et du genre de calculs (additions, multiplications, ...) à faire? Ca doit être tout con je suppose mais je ne trouve pas. Message édité par rat de combat le 14-12-2020 à 20:49:59 |
Publicité | Posté le 14-12-2020 à 20:49:11 |
rufo Pas me confondre avec Lycos! | Ben parce qu'en multipliant par 10000, t'as une précision de 4 chiffres après la virgule, donc c'est normal que tu obtiennes un meilleur résultat.
--------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
rat de combat attention rongeur méchant! | J'avoue que j'ai toujours du mal avec cette histoire / l'approche par tatonnement ne me plaît pas. J'essaye de me documenter et je viens de tomber sur une présentation de l'Université Paris 6 qui semble compréhensible au niveau maths. Je vais regarder ça...
|
rat de combat attention rongeur méchant! | Bon, j'ai trouvé comment contourner tout ce casse-tête. Il suffit de bricoler un peu les expressions pour n'avoir qu'une seule division tout à la fin et aucune valeur <1, du coup il suffit de prendre le numérator*100 (soit 10**2) pour avoir 2 décimales. Ce n'est pas parfait, il faudrait arrondir correctement, mais ça me va. Reste a voir la taille des variables.
Voilà, j'ai pas compris ces histoires de virgule fixe mais j'ai mon calcul qui fonctionne, ça devra suffire.
Message édité par rat de combat le 01-01-2021 à 17:59:01 |
Sujets relatifs | |
---|---|
[Divers] Calcul Clé Modulo | Import sans prendre la virgule comme séparateur des milliers |
C# - comment faire un algorithme de calcul de parité d'un octet | calcul le frais total |
Recherche de logiciel d'optimisation linéaire | UPDATE sql avec calcul de la valeur à modifier |
WGS84 : calcul point d'intersection de 2 segments en 3D (lat/lng/alt) | Calcul du volume de certains sous-dossiers |
C++ calcul d'un nombre prmier | [RESOLU]Excel calcul des jours de garde |
Plus de sujets relatifs à : calcul à virgule fixe, résolution et interpolation linéaire |