Big signed integer

Soyez le premier à donner votre avis sur cette source.

Vue 5 272 fois - Téléchargée 229 fois

Description

Un entier de taille non definie. Je poste le code du header, histoire de vous donner une idée.

Source / Exemple :


#ifndef BIGINT_INC
#define BIGINT_INC

#include <assert.h>
#include <iostream>
#include <list>

#ifndef MAX
#define MAX(a,b) ((a>b)?a:b)
#endif

#ifndef MIN
#define MIN(a,b) ((a<b)?a:b)
#endif

class BigInt
{
public:
	typedef unsigned char Byte;

	BigInt();
	~BigInt();
	BigInt(const BigInt & br);
	BigInt(unsigned int i);

	void operator = (const BigInt & br);
	void operator = (unsigned int i);
	void operator = (int i);

	BigInt operator * (const BigInt & br)const;
	BigInt operator * (unsigned int i)const;
	BigInt operator * (Byte b)const;
	BigInt operator + (unsigned int i)const;
	BigInt operator + (const BigInt & br)const;
	BigInt operator - (const BigInt & br)const;
	BigInt operator - ()const;

	BigInt operator << (unsigned int i) const;

	void operator *= (const BigInt & br);
	void operator *= (unsigned int i);
	void operator += (const BigInt & br);
	void operator += (unsigned int i);
	void operator -= (const BigInt & br);
	void operator -= (unsigned int i);
	
	void operator /= (const BigInt & br);
	void operator ++ ();
	void operator -- ();

	bool operator ==(const BigInt & br)const;
	bool operator !=(const BigInt & br)const;
	bool operator <(const BigInt & br)const;
	bool operator >(const BigInt & br)const;
	bool operator <=(const BigInt & br)const;
	bool operator >=(const BigInt & br)const;

	static void div(BigInt & q, BigInt & r, const BigInt & f, const BigInt & d);
	static BigInt gcd(BigInt & a, BigInt & b);

	void print(std::ostream & out)const;

	double to_double() const;

	static void test();
private:
	
	std::list<Byte> data_;
	bool positiv_;
};
inline std::ostream & operator << (std::ostream & out, const BigInt & bi){
	bi.print(out);
	return out;
}
#endif

Conclusion :


Bug connu (!) : l'affichage par la fonction print est en hexa ... Y en a que ca derrange ? :)

Bug inconnus : yup, pleins ! enfin, j'espere que non ...

J'ai aussi une classe Fraction qui est le rapport de 2 de ces BigInt. Mais le code est encore buggy...

Sinon, l'algo de la division est vraiment TRES POURRIS ! (comprendre PAS RAPIDE)

tib

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
par ailleurs j'ai aussi crée cette classe et j'aimerais bien avoir quelques commentaires pour savoir ce que vous en pensez
http://www.cppfrance.com/code.aspx?ID=19105
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
de toute facon à la fin tu ne eux pas avoir de trucs dont la taille n'est pas un multiple de 8 bits
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

tiens si d'autres pensent à écrire leur classe, ils peuvent jeter un coup d'oeil du côté de l'en-tête (STD -> super optimisé).

c'est un conteneur un peu spécial pour gérer des listes de bits (booléens mais gérés intelligemment, sur un bit, pas sur un octet comme le sont les bool standards).
Messages postés
3
Date d'inscription
jeudi 20 mars 2003
Statut
Membre
Dernière intervention
5 mars 2004

Moi aussi j'en ai fais une et pour moi aussi la fonction de division est méga lourde (en temps d'exécution).

Par contre l'affichage peut se faire dans les bases comprises entre 2 et 36, et l'opérateur istream>> est programmé (un peu maladroitement).

le plus étrange dans tout ca que que je n'avais pas regarder cet article pour programmer ma classe et pourtant on croirait le contraire en la regardant lol.

Je ne l'ai pas encore posté car je dois finir la gestion automatique de la taille de l'entier, les tests de bugs et les tests de performances.

Je le posterais dans le courant de la semaine...
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008

BjarneStroustrup : Bah c'est une source libre de droit tu peux le faire toi même ;-) ça doit pas être bien difficile...
tibur : Chapeau j'ai pas tout regardé mais ça a l'air vachement bien fait ! Par contre c'est pas un peu exagéré de mettre ça en Expert ?
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.