Où puis-je trouver une source libre ou ouverte C ++ bibliothèque pour faire des mathématiques BCD? [fermé]

StackOverflow https://stackoverflow.com/questions/6302195

  •  25-10-2019
  •  | 
  •  

Question

Où puis-je trouver une source libre ou ouverte C ++ bibliothèque pour faire Binary Coded Decimal maths?

Était-ce utile?

La solution

Ici, vous allez. Je viens d'écrire cela, et je fais ce domaine public.

Il convertit un bcd non signé à un entier non signé et vice-versa. Utilisez bcd2i () pour convertir vos BCDs à ints non signés, faire tout ce que les mathématiques dont vous avez besoin, puis utilisez i2bcd () pour les anciens numéros BCD.

unsigned int bcd2i(unsigned int bcd) {
    unsigned int decimalMultiplier = 1;
    unsigned int digit;
    unsigned int i = 0;
    while (bcd > 0) {
        digit = bcd & 0xF;
        i += digit * decimalMultiplier;
        decimalMultiplier *= 10;
        bcd >>= 4;
    }
    return i;
}

unsigned int i2bcd(unsigned int i) {
    unsigned int binaryShift = 0;  
    unsigned int digit;
    unsigned int bcd = 0;
    while (i > 0) {
        digit = i % 10;
        bcd += (digit << binaryShift);
        binaryShift += 4;
        i /= 10;
    }
    return bcd;
}
// Thanks to EmbeddedGuy for bug fix: changed init value to 0 from 1 


#include <iostream>
using namespace std;

int main() {
int tests[] = {81986, 3740, 103141, 27616, 1038, 
               56975, 38083, 26722, 72358, 
                2017, 34259};

int testCount = sizeof(tests)/sizeof(tests[0]);

cout << "Testing bcd2i(i2bcd(test)) on 10 cases" << endl;
for (int testIndex=0; testIndex<testCount; testIndex++) {
    int bcd = i2bcd(tests[testIndex]);
    int i = bcd2i(bcd);
    if (i != tests[testIndex]) {
        cout << "Test failed: " << tests[testIndex] << " >> " << bcd << " >> " << i << endl;
        return 1;
    }
}
cout << "Test passed" << endl;
return 0;
}

Autres conseils

Pour autant que je sache, les erreurs de conversion ne sont pas toujours acceptables. Comme les erreurs ne peuvent pas être évités, les calculs de BCD sont parfois un must. XBCD_Math, par exemple, est une bibliothèque à virgule flottante BCD entièrement sélectionnée.

Math est mathématique - il ne vous est d'ajouter la matière ou plusieurs fois dans la base 2, en base 10 ou en base 16:. La réponse est toujours la même

Je ne sais pas comment votre entrée et de sortie seraient codées, mais tout ce que vous avez besoin est converti de BCD en nombre entier, faites le calcul comme vous le feriez normalement, et à la fin réaffectent entier du BCD.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top