Communauté

Comment éviter le p...
 
Notifications
Retirer tout

Comment éviter le problème bizarre de modulo dans Pico 8 ?

2 Posts
2 Utilisateurs
0 Likes
533 Vu
0
Début du sujet

Bonjour à tous les élèves Devs de GameCodeur..

Récemment, j'ai découvert un bug étrange dans Pico-8. quand on utilise la fonction modulo

en utilisant un dividende qui est un résultat multiplié : ex :A=1.6*5 ou A=1.8*5 

on obtient avec le code suivant :

function _init()
a=1.6*5
print(a%8)

b=a
print(b%8)

a=8
print(a%8)

end

8

8

0

Ce qui évidemment est faux, on devrait avoir :

0

0

0

J'ai trouvé une solution qui est celle-ci mais peut-être cela a t'il déjà été trouvé:

function modulo(nb,div)
 return tonum(tostr(nb))%div
end

a=1.6*5
print(modulo(a,8))

 

cette fois-ci le resultat est bien 0.

 

Très étrange, je ne sais pas si cela vient du subst lua utilisé par pico8 ou bien de la version de lua utilisé par pico8..

Cela se produit avec de petits nombres réels positifs : ex 1,6 1,8...  etc..

avec par exemple a=(16*5)%8 on a bien 0.

 

 

 

 

 

 

2 Réponses
0

@piopio65 

Il y a un phénomène qui s'appelle "floating point innacuracy" :

" floating-point numbers cannot precisely represent all real numbers, and that floating-point operations cannot precisely represent true arithmetic operations, leads to many surprising situations"

A priori tu es tombé sur un cas chiant car effectivement 1.6*5 devrait faire 8, mais ça doit faire 7.99999999... sûrement pour Lua !?

Tu peux faire ici un "ceil(a)" et voir si ça t'aide.

Mais sinon oui, je vois des solutions proposées qui passent par une conversion en string pour plus de sécurité donc ta solution est ok.

0
Début du sujet

Bonjour David,

 

Merci beaucoup pour ta réponse. Je ne connaissais pas le phénomène de "floating point innacuracy" En tout cas pour le Pico-8 j'ai codé ma propre fonction elle tient en 3 lignes.

Sinon récemment j'ai vu tes videos de DLC sur le Snake en C#, j'ai transposé cela en Python avec Raylib 🙂

(j'ai déjà codé quelques améliorations dessus.. mettre des pièges, des bonus..)

Quand sera mis à disposition pour ceux qui ne sont pas membres du Club Privé le DLC 139 ?

J'ai une autre question mais peut-être en as tu déjà parlé : pourquoi n'y a t'il pas de cours ou de DLC en Python ?

Bonne journée.

 

Répondre
Share:

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.