Bonjour,
Est ce que en peux représenter n'importe quel nombre entier grand par des nombres moin petit par un algorithme.
Et utiliser cette méthode pour le gain de mémoire car n'importe fichier est une représentation d'un nombre entier grand .
-----
Bonjour,
Est ce que en peux représenter n'importe quel nombre entier grand par des nombres moin petit par un algorithme.
Et utiliser cette méthode pour le gain de mémoire car n'importe fichier est une représentation d'un nombre entier grand .
10^1234=10....0=algorithme(10, 1234) memoire grande.
10 et 1234 se code dans une mémoire petit.
Soit A un nombre premier*
Exemple*
A=1578=10^3+5*10^2+7*10+8*1*
En code 1 5 7 et 8 puis 3 2 1 et 0*
Soit A=abc...z=a*10^n-1+...z*
En peux coder les a b c...z et n-1 ...0 avec moin de memoire que coder A.
Bonsoir,
A ce que je comprend, rien de neuf sous le Soleil: en base 2 c'est la méthode standard pour représenter les nombres entiers...
Pour n bits, on peut coder 2^n entiers.
Tu ne réponds pas à ma question ou alors tu confonds plus et moins. TU veux donc coder un nombre entier par un nombre PLUS petit (et pas moins petit), c'est çà?.
C'est un peu le principe du codage des nombre à virgule flottante: mantisse et exposant. Le problème de ce codage, c'est que pour de grandes valeurs, la précision est moindre.10^1234=10....0=algorithme(10, 1234) memoire grande.
10 et 1234 se code dans une mémoire petit.
De plus, je ne vois pas trop comment on peut coder toutes les valeurs entières avec ce système sans perte d'information. Donc ton problème n'a pas de solution.
En peux faire une boucle compare avec notre fichier intial pour avoir une précision parfait.
Et en peux lire et ecrire segment par segment dans la memoire pour éviter la perte d'information.
Voici un exemple:
Soit un nombre entier(fichier) A de taille 1g.
Si j'enregistre se nombre dans la mémoire cava donné 1g
Si je prend se nombre entier et je trouve les nombres pour écrire ce nombre A comme dans l'exemple,les nombres enregistrés pour obtenir le nombre A est inférieur a 1 ko.
Je me le demande aussi car:
1. L'espace disque est fini et donc il ne sera de toute manière possible que de représenter une quantité finie de nombres.
2. Techniquement, faire appel au disque pour stocker et retrouver des résultats de calculs partiels est une (très) mauvaise idée, du fait que les temps d'accès disques qui sont "très" longs. Cela ne se fait que si on n'a pas d'autres choix techniquement plus performants.
Et doublon en prime : http://forums.futura-sciences.com/ma...ier-grand.html
Bonjour
La question étant de réduire la taille de « n'importe quel » nombre entier, la réponse est définitivement non, ça n'est pas possible si ces nombres sont déjà codés en binaire.
En effet, considérant des nombres entiers quelconques tenant dans un fichier de 1Go, soit 8x1073741824=8589934592 bits, alors ces 8589934592 bits sont absolument nécessaires pour pouvoir écrire les 28589934592 différentes valeurs possibles.
Si l'on disposait ne serait-ce que d'un bit de moins, alors plusieurs nombres devraient être codés de la même manière, et il ne serait alors plus possible de les distinguer. Le code ne permettrait plus de savoir lequel de ces nombres on représente.
Il est possible de réduire la taille de stockage d'un nombre, à condition :
• soit de partir d'une forme de représentation non optimale, comme par exemple avec une écriture utilisant des caractères représentant des chiffres décimaux :
le texte "12345" stocké sur 5 octets pourrait être réécrit en binaire 0011000000111001 et être stocké sur seulement 2 octets.
• soit de perdre en précision, en confondant des nombres différents, comme par exemple quand on utilise une représentation en virgule flottante :
le nombre 123456789 peut être codé sous la forme +1,839649·226 pour être stocké sur deux octets (1 bit de signe, 10 bits de mantisse fractionnaire et 5 bits pour l'exposant binaire) soit (–1)0·1,1101011011·211010. Mais alors, on ne peut plus le distinguer de nombres proches comme 123456780 ou 123456770, qui seraient codés de façon identique.
C'est un cas particulier de compression bijective et le résultat est le même que pour le cas général : pour une taille donnée, il existe toujours au moins un fichier binaire ne pouvant pas être comprimé.
Je donne un exemple:
Soit A=abc...z=a×10^n+b×10^n-1+...z=xxxx xxxx xxxxx...xxxxx <<z fois>> x est soit 0 soit 1 et xxxx egale a a b c ...z
Taille de (a b c ...z )<<taille de A car les a b c ...z sont multiplier par 10^n
a b c...z permis d'écrire parfaitement le A1
Et leur taille sont minimal par rapport au taille de A1.
En reptons cette operation en boucle en obtien un code minimal.
Suis je correct dans ce raisonnement?
Tu as demandé si ce que tu cherchais était possible et on t'a répondu que non. Si tu crois en ton système de codage, et bien mets le en oeuvre et tu reviendras quand il fonctionnera.
Ça, c'est une représentation en base 10. C'est le point concernant l'écriture non optimale que j'ai indiqué précédemment.
Par exemple A = abcdefghi = "123456789" (neuf caractères) = 1×108+2×107+3×106+...+9×100
Ça, c'est la réécriture de façon optimale en binaire : A = xxxxxxxxxxxxxxxx = 0011000000111001 (sur deux octets) dans mon exemple.... =xxxx xxxx xxxxx...xxxxx <<z fois>> x est soit 0 soit 1 et xxxx egale a a b c ...z
On est passé de neuf à deux octets, on a donc bien gagné de la place.
La taille est déjà minimale. Donc on ne peut pas l'améliorer une nouvelle fois.En reptons cette operation en boucle en obtien un code minimal.
Généralement, la représentation des nombres entiers traités par la CPU est déjà optimale. Quand elle ne l'est pas, c'est parce qu'on l'a transformée pour la rendre lisible par un être humain (parce que les caractères "2015" sont plus parlants que les bits 11111011111).
Fusionner les 2 discussions va entrainer une grande confusion en raison de l'enchevêtrement lié aux dates des messages. Le suivi du fil risque donc de devenir impossible.
Du coup je ferme ici.