Bonjour,

Je cherche a comprendre et à faire les choses suivantes.

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 ?

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 : 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
 
#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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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,