il y a cette classe mais je ne sais pas ce qu'elle vaut https://sourceforge.net/projects/cpp-bigint/
Merci a tous pour vos réponses très intéressantes ;) Cette classe convient parfaitement pour ce que je voulais faire (calculs de modulo sur des chiffres concaténés)
J'avais tenté de coder moi meme la division en éclatant mon entier sur des ulong, maids je me suis heurté à un autre problème, que je n'ai pas réussi à surmonter en une après midi de recherches : comment convertir une chaine de caractères représentant un nombre en sa représentation binaire (factorisé sur 4 ulongs) ?
en d'autre terme, comment coder atoi128, et son pendant i128toa ?
Une fois que tu as les cinq opérations (parce qu'il faut bien % aussi), de la même façon que dans atoi et itoa normal.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Eric Belhomme wrote:
"Pascal Pizeine" <pascal.pizeine@milesys.fr> wrote in
news:d99dul$rms$1@s1.news.oleane.net:
il y a cette classe mais je ne sais pas ce qu'elle vaut
https://sourceforge.net/projects/cpp-bigint/
Merci a tous pour vos réponses très intéressantes ;) Cette
classe convient parfaitement pour ce que je voulais faire
(calculs de modulo sur des chiffres concaténés)
J'avais tenté de coder moi meme la division en éclatant mon
entier sur des ulong, maids je me suis heurté à un autre
problème, que je n'ai pas réussi à surmonter en une après midi
de recherches : comment convertir une chaine de caractères
représentant un nombre en sa représentation binaire (factorisé
sur 4 ulongs) ?
en d'autre terme, comment coder atoi128, et son pendant i128toa ?
Une fois que tu as les cinq opérations (parce qu'il faut bien %
aussi), de la même façon que dans atoi et itoa normal.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
il y a cette classe mais je ne sais pas ce qu'elle vaut https://sourceforge.net/projects/cpp-bigint/
Merci a tous pour vos réponses très intéressantes ;) Cette classe convient parfaitement pour ce que je voulais faire (calculs de modulo sur des chiffres concaténés)
J'avais tenté de coder moi meme la division en éclatant mon entier sur des ulong, maids je me suis heurté à un autre problème, que je n'ai pas réussi à surmonter en une après midi de recherches : comment convertir une chaine de caractères représentant un nombre en sa représentation binaire (factorisé sur 4 ulongs) ?
en d'autre terme, comment coder atoi128, et son pendant i128toa ?
Une fois que tu as les cinq opérations (parce qu'il faut bien % aussi), de la même façon que dans atoi et itoa normal.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Benoît Dejean
Le Tue, 21 Jun 2005 11:46:24 +0000, Eric Belhomme a écrit :
bonjour,
bonjour. C'est un peu HS mais bon, je me lance. Actuellement, j'ai un powerpc 32bits. Quand je fais des calcules 64bits avec des 'long long' (ou déguisé dans autre chose) mon compilateur génère des instructions pour simuler ces opérations, mon processeur ne pouvant pas manipuler de telles quantités immédiatement. Vu que les processeurs 64bits vont devenir de plus en plus courant sur la machine de monsieur tout le monde, est-ce que le même genre de mécanisme ne pourrait pas être employé pour à termes disposer de 'long long long' ou ('long long long long') ?
Le Tue, 21 Jun 2005 11:46:24 +0000, Eric Belhomme a écrit :
bonjour,
bonjour. C'est un peu HS mais bon, je me lance. Actuellement, j'ai un
powerpc 32bits. Quand je fais des calcules 64bits avec des 'long long' (ou
déguisé dans autre chose) mon compilateur génère des instructions pour
simuler ces opérations, mon processeur ne pouvant pas manipuler de telles
quantités immédiatement. Vu que les processeurs 64bits vont devenir de
plus en plus courant sur la machine de monsieur tout le monde, est-ce que
le même genre de mécanisme ne pourrait pas être employé pour à termes
disposer de 'long long long' ou ('long long long long') ?
Le Tue, 21 Jun 2005 11:46:24 +0000, Eric Belhomme a écrit :
bonjour,
bonjour. C'est un peu HS mais bon, je me lance. Actuellement, j'ai un powerpc 32bits. Quand je fais des calcules 64bits avec des 'long long' (ou déguisé dans autre chose) mon compilateur génère des instructions pour simuler ces opérations, mon processeur ne pouvant pas manipuler de telles quantités immédiatement. Vu que les processeurs 64bits vont devenir de plus en plus courant sur la machine de monsieur tout le monde, est-ce que le même genre de mécanisme ne pourrait pas être employé pour à termes disposer de 'long long long' ou ('long long long long') ?
Fabien LE LEZ
On Thu, 23 Jun 2005 12:27:30 +0200, Benoît Dejean :
disposer de 'long long long' ou ('long long long long') ?
Pour que ça devienne standard, il faut que ce soit utile à un grand nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
On Thu, 23 Jun 2005 12:27:30 +0200, Benoît Dejean
<tazforever@free.fr>:
disposer de 'long long long' ou ('long long long long') ?
Pour que ça devienne standard, il faut que ce soit utile à un grand
nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
On Thu, 23 Jun 2005 12:27:30 +0200, Benoît Dejean :
disposer de 'long long long' ou ('long long long long') ?
Pour que ça devienne standard, il faut que ce soit utile à un grand nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
Gabriel Dos Reis
Fabien LE LEZ writes:
| On Thu, 23 Jun 2005 12:27:30 +0200, Benoît Dejean | : | | >disposer de 'long long long' ou ('long long long long') ? | | Pour que ça devienne standard, il faut que ce soit utile à un grand | nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
Oui.
-- Gaby
Fabien LE LEZ <gramster@gramster.com> writes:
| On Thu, 23 Jun 2005 12:27:30 +0200, Benoît Dejean
| <tazforever@free.fr>:
|
| >disposer de 'long long long' ou ('long long long long') ?
|
| Pour que ça devienne standard, il faut que ce soit utile à un grand
| nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
| On Thu, 23 Jun 2005 12:27:30 +0200, Benoît Dejean | : | | >disposer de 'long long long' ou ('long long long long') ? | | Pour que ça devienne standard, il faut que ce soit utile à un grand | nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
Oui.
-- Gaby
Pierre Maurette
bonjour,
bonjour. C'est un peu HS mais bon, je me lance. Actuellement, j'ai un powerpc 32bits. Quand je fais des calcules 64bits avec des 'long long' (ou déguisé dans autre chose) mon compilateur génère des instructions pour simuler ces opérations, mon processeur ne pouvant pas manipuler de telles quantités immédiatement. Vu que les processeurs 64bits vont devenir de plus en plus courant sur la machine de monsieur tout le monde, est-ce que le même genre de mécanisme ne pourrait pas être employé pour à termes disposer de 'long long long' ou ('long long long long') ? Je verrais bien une évolution qui établirait une différence entre types
génériques et types fondamentaux. Le vocabulaire est emprunté à la documentation en français de Delphi, il y a certainement un meilleur choix. Mes réflexions concernent les types numériques simples, entiers et pourquoi pas flottants. - Les types génériques sont les types actuels, dont ni la taille ni le codage des négatifs ne sont garantis indépendamment de l'implémentation. En résumant énormément, on a le char qui sert essentiellement à coder un caractère, le int qui est l'entier naturel de la plateforme, celui qui garantit les meilleures performances. Quand on choisit d'utiliser un int, la compilation et l'exécution doivent supporter le changement d'implémentation. Dans ces conditions, le short est un type existant sur lma plateforme mais optimisé en occupation mémoire, et le long la même chose mais optimisé en capacité. - Les types fondamentaux pourraient s'inspirer de stdint.h (qui est je crois C99), mais peu importe en fait. Ce seraient des types garantis en taille et comportement (complément à deux par exemple), mais implementtaion facultative (bien entendu), c'est à dire selon le schéma ça existe ou ça n'existe pas (avec les macros qui vont bien), mais si ça existe ça s'appelle comme ça. Il pourrait être utile d'ajouter à partir du même mécanisme (de semi-normalistaion) des versions alignées des données, des types bizarres mais qui existent, comme 4 float ou 2 doubles "packed" dans 128 bits par exemple.
-- Pour répondre directement: enlever une lettre sur deux wwaannaaddoooo -> wanadoo
Pierre Maurette
bonjour,
bonjour. C'est un peu HS mais bon, je me lance. Actuellement, j'ai un
powerpc 32bits. Quand je fais des calcules 64bits avec des 'long long' (ou
déguisé dans autre chose) mon compilateur génère des instructions pour
simuler ces opérations, mon processeur ne pouvant pas manipuler de telles
quantités immédiatement. Vu que les processeurs 64bits vont devenir de
plus en plus courant sur la machine de monsieur tout le monde, est-ce que
le même genre de mécanisme ne pourrait pas être employé pour à termes
disposer de 'long long long' ou ('long long long long') ?
Je verrais bien une évolution qui établirait une différence entre types
génériques et types fondamentaux. Le vocabulaire est emprunté à la
documentation en français de Delphi, il y a certainement un meilleur
choix. Mes réflexions concernent les types numériques simples, entiers
et pourquoi pas flottants.
- Les types génériques sont les types actuels, dont ni la taille ni le
codage des négatifs ne sont garantis indépendamment de
l'implémentation. En résumant énormément, on a le char qui sert
essentiellement à coder un caractère, le int qui est l'entier naturel
de la plateforme, celui qui garantit les meilleures performances. Quand
on choisit d'utiliser un int, la compilation et l'exécution doivent
supporter le changement d'implémentation. Dans ces conditions, le short
est un type existant sur lma plateforme mais optimisé en occupation
mémoire, et le long la même chose mais optimisé en capacité.
- Les types fondamentaux pourraient s'inspirer de stdint.h (qui est je
crois C99), mais peu importe en fait. Ce seraient des types garantis en
taille et comportement (complément à deux par exemple), mais
implementtaion facultative (bien entendu), c'est à dire selon le schéma
ça existe ou ça n'existe pas (avec les macros qui vont bien), mais si
ça existe ça s'appelle comme ça.
Il pourrait être utile d'ajouter à partir du même mécanisme (de
semi-normalistaion) des versions alignées des données, des types
bizarres mais qui existent, comme 4 float ou 2 doubles "packed" dans
128 bits par exemple.
--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo
bonjour. C'est un peu HS mais bon, je me lance. Actuellement, j'ai un powerpc 32bits. Quand je fais des calcules 64bits avec des 'long long' (ou déguisé dans autre chose) mon compilateur génère des instructions pour simuler ces opérations, mon processeur ne pouvant pas manipuler de telles quantités immédiatement. Vu que les processeurs 64bits vont devenir de plus en plus courant sur la machine de monsieur tout le monde, est-ce que le même genre de mécanisme ne pourrait pas être employé pour à termes disposer de 'long long long' ou ('long long long long') ? Je verrais bien une évolution qui établirait une différence entre types
génériques et types fondamentaux. Le vocabulaire est emprunté à la documentation en français de Delphi, il y a certainement un meilleur choix. Mes réflexions concernent les types numériques simples, entiers et pourquoi pas flottants. - Les types génériques sont les types actuels, dont ni la taille ni le codage des négatifs ne sont garantis indépendamment de l'implémentation. En résumant énormément, on a le char qui sert essentiellement à coder un caractère, le int qui est l'entier naturel de la plateforme, celui qui garantit les meilleures performances. Quand on choisit d'utiliser un int, la compilation et l'exécution doivent supporter le changement d'implémentation. Dans ces conditions, le short est un type existant sur lma plateforme mais optimisé en occupation mémoire, et le long la même chose mais optimisé en capacité. - Les types fondamentaux pourraient s'inspirer de stdint.h (qui est je crois C99), mais peu importe en fait. Ce seraient des types garantis en taille et comportement (complément à deux par exemple), mais implementtaion facultative (bien entendu), c'est à dire selon le schéma ça existe ou ça n'existe pas (avec les macros qui vont bien), mais si ça existe ça s'appelle comme ça. Il pourrait être utile d'ajouter à partir du même mécanisme (de semi-normalistaion) des versions alignées des données, des types bizarres mais qui existent, comme 4 float ou 2 doubles "packed" dans 128 bits par exemple.
-- Pour répondre directement: enlever une lettre sur deux wwaannaaddoooo -> wanadoo
Pierre Maurette
Alexandre
disposer de 'long long long' ou ('long long long long') ?
Pour que ça devienne standard, il faut que ce soit utile à un grand nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
cryptage avec des clés > 128 bits ?
disposer de 'long long long' ou ('long long long long') ?
Pour que ça devienne standard, il faut que ce soit utile à un grand
nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
disposer de 'long long long' ou ('long long long long') ?
Pour que ça devienne standard, il faut que ce soit utile à un grand nombre de gens. Tu manipules souvent des entiers supérieurs à 10^19 ?
cryptage avec des clés > 128 bits ?
Stephan Ferraro
Eric Belhomme wrote:
bonjour,
J'ai besoin d'effectuer de opérations sur des entiers de 128 bits. probleme : je ne sais pas manipuler de tels nombres.
Quelles sont les solutions envisageables ? (environement MS Visual C++ 6)
Merci ;)
Pour 64 bits tu peux définir: "long long int ta_variable"
Pour 128 bits: Alors peut-etre si tu achete un processeur 64 bits, tu peux passer comme ca avec "long long int ta_variable" automatiquement en 128 bits, ou sinon il faut "emuler" les opérations de calcul par une librarie qui fait tout ca très bien: libgmp Elle est gratuit et open source. Regarde sur http://www.swox.com/gmp/
Sinon si tu ne veux pas utiliser la libgmp et rester sur une machine 32 bits, essai de faire des macros genre ADD_128, SUB_128, MUL_128, DIV_128 qui font les calculs pour toi en utilisant deux variable 64 bits du type "long long int".
-- Best regards, Stephan FERRARO - NOOFS Core Developper { EPITECH. } 5th year computer science student in Paris.
Eric Belhomme wrote:
bonjour,
J'ai besoin d'effectuer de opérations sur des entiers de 128 bits. probleme
: je ne sais pas manipuler de tels nombres.
Quelles sont les solutions envisageables ? (environement MS Visual C++ 6)
Merci ;)
Pour 64 bits tu peux définir:
"long long int ta_variable"
Pour 128 bits: Alors peut-etre si tu achete un processeur 64 bits, tu
peux passer comme ca avec "long long int ta_variable" automatiquement en
128 bits, ou sinon il faut "emuler" les opérations de calcul par une
librarie qui fait tout ca très bien: libgmp
Elle est gratuit et open source. Regarde sur http://www.swox.com/gmp/
Sinon si tu ne veux pas utiliser la libgmp et rester sur une machine 32
bits, essai de faire des macros genre ADD_128, SUB_128, MUL_128, DIV_128
qui font les calculs pour toi en utilisant deux variable 64 bits du type
"long long int".
--
Best regards,
Stephan FERRARO - NOOFS Core Developper
{ EPITECH. } 5th year computer science student in Paris.
J'ai besoin d'effectuer de opérations sur des entiers de 128 bits. probleme : je ne sais pas manipuler de tels nombres.
Quelles sont les solutions envisageables ? (environement MS Visual C++ 6)
Merci ;)
Pour 64 bits tu peux définir: "long long int ta_variable"
Pour 128 bits: Alors peut-etre si tu achete un processeur 64 bits, tu peux passer comme ca avec "long long int ta_variable" automatiquement en 128 bits, ou sinon il faut "emuler" les opérations de calcul par une librarie qui fait tout ca très bien: libgmp Elle est gratuit et open source. Regarde sur http://www.swox.com/gmp/
Sinon si tu ne veux pas utiliser la libgmp et rester sur une machine 32 bits, essai de faire des macros genre ADD_128, SUB_128, MUL_128, DIV_128 qui font les calculs pour toi en utilisant deux variable 64 bits du type "long long int".
-- Best regards, Stephan FERRARO - NOOFS Core Developper { EPITECH. } 5th year computer science student in Paris.
Fabien LE LEZ
On Tue, 19 Jul 2005 03:06:57 +0200, Stephan Ferraro :
Alors peut-etre si tu achete un processeur 64 bits
Il me semble que sous Windows XP, en 64 bits, seuls les pointeurs sont en 64 bits -- les entiers longs restent en 32 bits. Cf <news:
On Tue, 19 Jul 2005 03:06:57 +0200, Stephan Ferraro
<ferrar_s@epitech.net>:
Alors peut-etre si tu achete un processeur 64 bits
Il me semble que sous Windows XP, en 64 bits, seuls les pointeurs sont
en 64 bits -- les entiers longs restent en 32 bits.
Cf <news:pxbsmbl4ymq.fsf@news.bourguet.org>
On Tue, 19 Jul 2005 03:06:57 +0200, Stephan Ferraro :
Alors peut-etre si tu achete un processeur 64 bits
Il me semble que sous Windows XP, en 64 bits, seuls les pointeurs sont en 64 bits -- les entiers longs restent en 32 bits. Cf <news:
kanze
Stephan Ferraro wrote:
Eric Belhomme wrote:
J'ai besoin d'effectuer de opérations sur des entiers de 128 bits. probleme : je ne sais pas manipuler de tels nombres.
Quelles sont les solutions envisageables ? (environement MS Visual C++ 6)
Pour 64 bits tu peux définir: "long long int ta_variable"
Pas avec VC++. Long long est une aberration Unicienne, adoptée par C99, mais non encore par C++. Microsoft offer l'extension __int64, en revanche.
Pour 128 bits: Alors peut-etre si tu achete un processeur 64 bits, tu peux passer comme ca avec "long long int ta_variable" automatiquement en 128 bits,
Ce n'est pas le cas sur les 64 bits que je connais (Sparc sous Solaris).
ou sinon il faut "emuler" les opérations de calcul par une librarie qui fait tout ca très bien: libgmp Elle est gratuit et open source. Regarde sur http://www.swox.com/gmp/
Sinon si tu ne veux pas utiliser la libgmp et rester sur une machine 32 bits, essai de faire des macros genre ADD_128, SUB_128, MUL_128, DIV_128 qui font les calculs pour toi en utilisant deux variable 64 bits du type "long long int".
Je verrais bien plutôt une classe avec des opérateurs surchargés, et non des macros. La division n'est pas évidente. Ni l'idée de travailler sur long long (qui n'est pas portable, et non nécessairement la solution la plus rapide où il existe).
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Stephan Ferraro wrote:
Eric Belhomme wrote:
J'ai besoin d'effectuer de opérations sur des entiers de 128
bits. probleme
: je ne sais pas manipuler de tels nombres.
Quelles sont les solutions envisageables ? (environement MS Visual C++ 6)
Pour 64 bits tu peux définir:
"long long int ta_variable"
Pas avec VC++. Long long est une aberration Unicienne, adoptée
par C99, mais non encore par C++. Microsoft offer l'extension
__int64, en revanche.
Pour 128 bits: Alors peut-etre si tu achete un processeur 64
bits, tu peux passer comme ca avec "long long int ta_variable"
automatiquement en 128 bits,
Ce n'est pas le cas sur les 64 bits que je connais (Sparc sous
Solaris).
ou sinon il faut "emuler" les opérations de calcul par une
librarie qui fait tout ca très bien: libgmp Elle est gratuit
et open source. Regarde sur http://www.swox.com/gmp/
Sinon si tu ne veux pas utiliser la libgmp et rester sur une
machine 32 bits, essai de faire des macros genre ADD_128,
SUB_128, MUL_128, DIV_128 qui font les calculs pour toi en
utilisant deux variable 64 bits du type "long long int".
Je verrais bien plutôt une classe avec des opérateurs
surchargés, et non des macros. La division n'est pas évidente.
Ni l'idée de travailler sur long long (qui n'est pas portable,
et non nécessairement la solution la plus rapide où il existe).
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
J'ai besoin d'effectuer de opérations sur des entiers de 128 bits. probleme : je ne sais pas manipuler de tels nombres.
Quelles sont les solutions envisageables ? (environement MS Visual C++ 6)
Pour 64 bits tu peux définir: "long long int ta_variable"
Pas avec VC++. Long long est une aberration Unicienne, adoptée par C99, mais non encore par C++. Microsoft offer l'extension __int64, en revanche.
Pour 128 bits: Alors peut-etre si tu achete un processeur 64 bits, tu peux passer comme ca avec "long long int ta_variable" automatiquement en 128 bits,
Ce n'est pas le cas sur les 64 bits que je connais (Sparc sous Solaris).
ou sinon il faut "emuler" les opérations de calcul par une librarie qui fait tout ca très bien: libgmp Elle est gratuit et open source. Regarde sur http://www.swox.com/gmp/
Sinon si tu ne veux pas utiliser la libgmp et rester sur une machine 32 bits, essai de faire des macros genre ADD_128, SUB_128, MUL_128, DIV_128 qui font les calculs pour toi en utilisant deux variable 64 bits du type "long long int".
Je verrais bien plutôt une classe avec des opérateurs surchargés, et non des macros. La division n'est pas évidente. Ni l'idée de travailler sur long long (qui n'est pas portable, et non nécessairement la solution la plus rapide où il existe).
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34