• [^] # Re: Boost

    Posté par (site web personnel) . En réponse au journal [Letlang] Faire la différence entre un nombre et une quantité. Évalué à 7. Dernière modification le 22 mars 2022 à 15:12.

    Dans notre cas on a fait très simple :

    • Données internes uniquement en entier (stockés en 64 bits) ;
    • Les flottants servent en tant qu'intermédiaires de calcul (pour la conversion en général) ou pour convertir une donnée extérieure qui est en flottant ou dans une autre unité ;
    • On a notre système standard : toute pression est gérée en millibar, toute température en millicelsius, etc. Cela permet de limiter le besoin de flottants, ça simplifie la gestion des données car la conversion n'est faite que pour communiquer avec l'extérieur du logiciel (affichage web, requêtes Modbus, etc.). tout en gardant une précision largement suffisante pour notre besoin. Et les requêtes qu'on contrôle (affichage web et requêtes MQTT) utilisent nativement ce système standard (donc pas de conversion nécessaire) ;
    • Toute mesure est en fait une classe où une valeur entière est associée à une unité provenant de Boost (ou crées par nous même mais compatibles avec Boost) avec en plus une notion de validité qui dépend de la mesure (ce qui évite le besoin de jouer avec NaN pour ce genre de choses).

    Typiquement si je fais

    Energy energy(-150 * watt_hour);
    bool valid = energy.isValid();

    valid vaudra false car une énergie négative en Watt.heure n'a pas de sens. Du coup on peut adapter le comportement très facilement.