Bonjour,
le programme suivant converti une valeur décimal en binaire après l'application d'un décalage (offset) et d' un facteur d’échelle (scaling).
La division par 0.01 dans la fonction float2int introduit une erreur d'arrondi. Pourquoi?
001001001111 est le résultat obtenu (591 en décimal)
001001010000 est le résultat attendu (592 en décimal)
Résultats:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #include <stdio.h> #include <iostream> #include <iomanip> #include <bitset> int main(void) { int16_t float2int(double value); double Temp_dec; int16_t Temp_bin; Temp_dec = 255.92; Temp_bin = float2int(Temp_dec); // Print expected 12 bit binary for decimal value 592 std::cout << "592 (binary): " << std::bitset<12>(592)<< std::endl; return 0; } int16_t float2int(double value) { value = (value - 250.00) / 0.01; // offset = 250 and scaling factor = 0.01 std::cout << "Result (dec): " << std::fixed << std::setprecision(2) << value << std::endl; std::cout << "Result (binary): " << std::bitset<12>(value)<< std::endl; return (int16_t)(value); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Result (dec): 592.00 Result (binary): 001001001111 592 (binary): 001001010000
Partager