Cette demande a probablement été probablement avant, mais je ne pouvais pas trouver quoi que ce soit pertinent.Implémentation décimal/arithmétique arbitraire en utilisant les types de données comme nombre entier
Serait-il possible/mettre en œuvre une performante sorte de arithmatic arbitraire/décimal par une classe spécialisée ou struct d'un montant arbitraire/fixe d'entiers?
Permettez-moi de préciser; flotte (comme je le comprends), utilise une mantisse, un exposant et peut-être un bit de signe. Ils sont capables de représenter 1/2, 1/4, 1/8, etc ... mais pas, disons 1/10. Ce que je propose est quelque chose comme ceci: que le nombre soit représenté par un int
ou int64_t
ou une série de ceux-ci, en gardant seulement les valeurs jusqu'à une puissance de dix complètement couvert par la gamme de l'entier (ainsi pour un entier de 32 bits, la limite serait de 10^8-1). Ceci seulement pour garder le calcul facile. Ajoutez à cela un exposant, qui dira quelle puissance de dix il devrait être multiplié pour obtenir le nombre réel.
Un exemple: 125,36 serait représenté par un int
égal à 12536 et une puissance de dix égale à -2. Ce nombre prendrait en effet autant que int
s, et un tas de fonctions spéciales.
Un autre exemple: 4294967297 (qui est égal à 2^32 + 1) prendrait deux int
s, une égal à 4, l'autre égale à 294.967.297, et une puissance de dix égal à 0.
Est-ce un bonne idée, jetant toute cette mémoire pour une arithmétique plus simple/plus rapide? Je n'ai pas tout à fait pensé à la partie de débordement, peut-être calculer int32_t+int32_t=int64_t
résoudrait cela magnifiquement?
Oui, bon point, mais ne sera pas mon plan en mesure d'obtenir plus de précision que simple '' double' ou même à long double', avec des performances peut-être décent sans de frais généraux? Ou est-ce que je repense les solutions existantes qui sont beaucoup, beaucoup mieux? – rubenvb
Eh bien, je ne suis certainement pas un expert dans ce domaine. Quel est ton but? Vitesse - puis effectuez les opérations habituelles en virgule flottante; cpu d'aujourd'hui sont hautement optimisés pour ce genre de chose. Précision - alors pourquoi doit-il être décimal? (Vraiment, juste mon 2c, rien sur quoi compter vraiment.) – jammon