62 votes

D'où vient le chiffre de 18 446 744 073 709 551 616 ?

En lisant No Mans Sky, et en entendant parler des 18 446 744 073 709 551 616 planètes existantes, je suis curieux de savoir d'où vient ce nombre ? Est-ce que cela signifie qu'il y a 18 446 744 073 709 551 616 unique planètes, et si 1 ils sont tous trouvés, la prochaine planète serait une répétition ? Ou est-ce que ça veut dire qu'ils ont placé une sorte de "limite dure" dans le code pour ce nombre ? Ou quelque chose de complètement différent ?

Je pense qu'ils peuvent calculer que leur algorithme de génération de monde a 18 446 744 073 709 551 616 valeurs de sortie uniques, et que toutes les nouvelles planètes après cela seraient des répétitions.

1 Je sais que cela n'arrivera jamais.

Mise à jour : J'ai contacté Hello Games, et s'ils répondent (j'imagine qu'ils sont encore un peu occupés en ce moment !), je mettrai à jour ce post avec ce qu'ils disent.

4 votes

Un fait amusant ! Ce nombre est si élevé que chaque joueur sur Terre devrait atteindre un cumul de ~ 607 000 000 (six cent millions) de planètes pour avoir une probabilité de seulement 1 % d'avoir des planètes répétées. Ce n'est pas tout à fait déraisonnable si le jeu connaît un succès fou pendant une longue période, mais c'est très très improbable.

0 votes

Je ne pense pas qu'ils utilisent ce numéro comme une semence mais simplement comme un numéro d'identification, mais je peux me tromper.

92 votes

Eh bien fils, quand deux entiers s'aiment beaucoup...

101voto

Dan Points 488

18,446,744,073,709,551,616 est 2^64. Je suppose que cela signifie que l'algorithme de génération de planètes est basé sur une graine aléatoire qui est un nombre de 64 bits (par exemple, le long dans de nombreux langages de programmation). Je ne sais pas comment (ou même si ; comment pourrait-on vérifier ?) ils garantissent que toutes les entrées possibles sont utilisées et qu'aucune n'est répétée.

EDIT : Bien qu'il soit toujours vrai que ce nombre est 2^64 (et il apparaît toujours dans certaines déclarations dans l'histoire, donc on pourrait dire que c'est le nombre de planètes qui existent dans l'univers), il n'y a pas autant de planètes dans le jeu. Depuis la mise à jour Atlas Rises, il y a 256 (257 ? Ce n'est pas tout à fait clair) galaxies, et chaque planète a une coordonnée hexagonale à 12 chiffres qui l'identifie dans la galaxie. Cette coordonnée est divisée en plusieurs parties :

  • 3 chiffres pour les coordonnées X et Z de la région (une région est un volume d'espace de forme cubique).
  • 2 chiffres Coordonnée Y de la région
  • Système à 3 chiffres dans la région (les régions connues ont 533 à 553 systèmes, donc toutes les valeurs ne sont pas utilisées)
  • 1 chiffre de la planète dans le système (0 n'est pas utilisé, le plus grand système connu est composé de 6 planètes et 2 lunes)

Donc, en mettant tout ça ensemble, il y a environ 600 trillions de systèmes. Si huit corps par système sont typiques (en pratique, il s'agit d'une estimation élevée), cela représente environ 5 quadrillions, ce qui est encore loin des 18 quintillions dont il est question ici.

En pratique, cela n'a aucune importance, car si un nouveau système était découvert chaque seconde, il faudrait 74 000 ans pour atteindre tous les systèmes d'une galaxie.

1 votes

J'ai entendu dire que la "graine" est la position actuelle de (votre|vos vaisseaux|les planètes), donc je suppose qu'il y aura une position approximative. game.getPlayer().getCoords().toLong() pour avoir obtenu la graine. Peut-être que c'est une question pour maths.se pour savoir si oui ou non il est possible de prouver combien de résultats une fonction aurait.

24 votes

Ne pourraient-ils pas utiliser une seule graine pour la génération ? Je ne comprends pas pourquoi ils auraient besoin de régénérer les graines, qui à leur tour régénéreraient l'univers.

8 votes

@edthethird c'est parce qu'ils utiliseront un générateur de nombres pseudo-aléatoires, qui sera en fait un algorithme déterministe pour créer des nombres à partir d'une condition initiale (la graine). Par conséquent, la même entrée de graine donnera le même ensemble de nombres à partir d'un générateur de nombres pseudo-aléatoires pour générer la même planète. Voir fr.wikipedia.org/wiki/Pseudorandom_number_generator pour plus de détails.

68voto

Je suis curieux, d'où vient ce chiffre ?

18,446,744,073,709,551,616 est 2^64 . En termes de programmation, 18.446.744.073.709.551.61 5 tend à être la limite supérieure d'une unsigned long long mais cela dépend de l'implémentation. 18,446,744,073,709,551,61 6 seront tous les nombres possibles pour un unsigned long long y compris 0 (c'est-à-dire 18 446 744 073 709 551 615 + 1).

Essentiellement, il est très probablement provoqué par les limites d'un type de données. Dans ce jeu, il semble que le type de données soit la graine de la planète.

A graines est une variable permettant de générer des données (pseudo) aléatoires dans un algorithme. En supposant que l'algorithme reste inchangé, la même graine générera les mêmes données.

Par conséquent, l'utilisation de la même graine de planète vous donnera la même planète. Si vous avez joué à Minecraft, vous comprendrez probablement le concept général de réutilisation des graines pour obtenir la même carte.

2^64 pour une graine semble avoir été choisi pour donner l'illusion de mondes infinis. Techniquement, il ne peut y avoir que 18,446,744,073,709,551,616 mondes via cette graine. Fonctionnement, il faudrait 584 millions d'années si vous pouviez visiter un nouveau monde toutes les secondes. ou pour citer le même article :

Il faudrait environ 7,3 milliards de personnes, travaillant toutes de la naissance à la mort, visitant une planète chaque seconde de leur vie dans ce jeu, pour voir 18,4 quintillions de mondes combinés. La population actuelle de la Terre est de 8 milliards de personnes. Donc, oui, No Man's Sky a un univers infini, pour toute personne raisonnable, en tout cas.


Cela signifie-t-il qu'il y a 18 446 744 073 709 551 616 planètes uniques ?

Non, il n'y a aucune garantie que 2 graines uniques donneront 2 planètes uniques. Par exemple, les graines 1 et 90 000 peuvent générer la même planète. Tout cela dépend de l'algorithme lui-même.

Pour que l'algorithme puisse générer une planète unique pour toutes les graines :

  1. Il existe 18 446 744 073 709 551 616 combinaisons uniques ou plus des propriétés des planètes.
  2. L'algorithme associe les graines à chacun de ces états uniques une seule fois.

Sans aucune analyse de l'algorithme impliqué, nous ne pouvons que spéculer si cela se produit.

Tout ce que j'ai pu trouver sur l'algorithme est qu'il a 14 000 lignes et a été écrit de manière à créer mondes navigables . Le fait de les rendre navigables suggère qu'une certaine simplification est appliquée pour éviter les structures complexes. Le bon sens voudrait que cela limite le caractère unique des planètes.

Fonctionnellement, il semblerait que chaque planète visitée soit unique. Techniquement, et bien comme je l'ai dit plus haut, cela dépendra de l'algorithme.


Je pense qu'ils peuvent calculer que leur algorithme de génération de monde a 18 446 744 073 709 551 616 valeurs de sortie uniques, et que toutes les nouvelles planètes après cela seraient des répétitions.

L'algorithme n'autorise que les graines comprises entre 0 et 18 446 744 073 709 551 615, inclus. Si vous pouviez d'une manière ou d'une autre ajouter une valeur supérieure à 18 446 744 073 709 551 615, je supposerais que vous verriez soit une panne, une erreur ou un dépassement de capacité à un nombre valide. Par exemple, 18,446,744,073,709,551,616 peut déborder sur 0.

En fait, je suis presque certain que 18 446 744 073 709 551 616 est le nombre maximal de graines, sans tenir compte des astuces pour forcer une valeur plus élevée.

0 votes

Les commentaires ne sont pas destinés à une discussion approfondie ; cette conversation a été déplacé vers le chat .

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X