Bonjour,
Je cherche a comprendre et à faire les choses suivantes.
j'ai ben tester avec plusieurs façon de faire, évidement bloquer à partir de 63 .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)
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,
Partager