Dépassement de capacité 2*128
Bonjour,
Je cherche a comprendre et à faire les choses suivantes.
Citation:
Un simple 2 puissance *128 ou plus avec des opération qui vont bien avec du numérique.
Un moyen de l'afficher ( j'ai penser faire un template)
j'ai ben tester avec plusieurs façon de faire, évidement bloquer à partir de 63 .
Après pas mal de recherche : int64_t ne suffi pas, donc comment on si prend quand cela dépasse ce qui à été prévu.
A par balancer une erreur de capacité , pour le moment dans la libraire standard rien ne semble gérer des chiffre qui
aujourd'hui sont vraiment très petit.
long long int , int64_t etc. est trop petit. Le c++ est il inadapté pour ce genre de calcule ?:koi:
j'imagine que des libraires on pris le relai pour corriger cela, cela risque de nuire a la lisibilité et a la portabilité.
voici le code que j'ai fait pour le moment,
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#ifndef PUISSANCE_H
#define PUISSANCE_H
#include <iostream>
#include <string>
class Math
{
public:
//constructeur
Math(int64_t, int64_t);
uint64_t Result();
private:
int64_t calcule();
int64_t numerique =0;
int64_t puissance =0;
};
#endif |
Code:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
#include <iostream>
#include "puissance.h"
template <typename T>
std::string tostring(const T& t)
{
std::ostringstream ss;
ss << t;
return ss.str();
/*
* a tester
usage :
uint64_t data = 123;
std::string mystring = tostring(data);
*/
}
Math::Math(int64_t A, int64_t P) {
numerique = A;
puissance = P;
}
int64_t Math::calcule() {
uint64_t _cb = 1;
for (int i = 1; i <= puissance; ++i)
{
_cb = numerique * _cb;
if ( _cb < 1) {
std::cout << "Erreur depassment de capaciter: " << i << " : " << _cb << std::endl;
return -1;
}
else
{
std::cout << "DB: " << i << " : " << _cb << std::endl;
}
}
return _cb;
}
uint64_t Math::Result() {
if ((puissance <= 0) || (numerique <= 0)) { return 0; }
return calcule();
} |
Code:
1 2 3 4 5 6 7 8 9 10
|
//dans le main
#include <iostream>
#include "puissance.h"
Math _cp1(2,128);
int64_t _count1 = 0;
_count1 = _cp1.Result();
std::cout << "Count : " << _count1 << "\n"; |
Merci d'avance,