Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Crash au lancement de l'add-in sans probleme à la compilation.
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Crash au lancement de l'add-in sans probleme à la compilation.

Posté le 23/04/2023 15:49

Bonjour,
j'essaye depuis un moment de recréer Minecraft sur graph 90 + e.

Mon renderer 3D fonctionne mais pour l'optimiser j'ai remplacé les float par des "nombres à virgule fixés".

Mais après avoir tout implémenté et compilé sans erreur, je le transfert et l'add -in crash avec un message d'erreur que je ne comprend pas. J'ai l'impression que l'erreur ne vient pas vraiment d'un endroit précis du code car en commentant et décommentant certaines parties, cela marche certaines fois ...

Voici le dépôt git (Mal fait mais bon ...) : https://git.tipragot.fr/yannis/graphcraft
Les dernières modifications sont dans la branche "optimisations".

Message d'erreur
Cliquer pour enrouler



Merci


Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 25/04/2023 12:02 | #


Ah oui attention.

Typiquement tu passes d'une valeur vers sa correspondance en fixed point (FP) en effectuant une multiplication par un multiple de puissance de 2.

par exemple si tu es en FP32 bits et que tu multiplies tout par 2^16 (65536) pour avoir du FP16.16 (c'est le classique).

alors quand tu multiplies deux FP32 ensemble, il faut faire gaffe à 2 choses :
1/ ca peut déborder donc logiquement on passe par un 64bits pour stocker la multiplication
2/ il faut pas oublier de diviser le résultat par 2^16 car sinon ton résultat est faux (car a ET b on été multipliés tous les deux auparavant)

a * b transformé en FP donne (a * b * 65536)
FP(a) * FP(a) transformé en a*65563 * b*65536 --> d'ou le besoin de diviser une fois par 65536

je sais pas si je suis clair

pour la division, idem, mais cette fois faut multiplier (en réalité il faut commencer par multiplier avant de diviser sinon tu perds la précision)
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 26/04/2023 12:45 | #


Je ne comprend pas car le code suivant me donne -6.30885 avec 34.68 * 23.809 (j'ai choisi les nombres au pifs )...

FixedPoint operator*(const FixedPoint &a, const FixedPoint &b)
{
    long raw_value = (a.value * b.value);
    return FixedPoint(raw_value / PRECISION);
}

WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 26/04/2023 12:56 | #


entre parenthèse, ton choix de PRECISION est étrange ; PRECISION=8192, soit 2^13; &a signifie que tu travailles sur des fixed point en 19:13
19 bits pour représenter la partie entière et 13bits pour la partie décimale. C'est possible, mais peu habituel

essaye ça et dis moi si ça marche:


FixedPoint operator*(const FixedPoint &a, const FixedPoint &b)
{
    FixedPoint r;
    r.value = a.value * b.value / PRECISION;
    return r;
}


Comment crées tu tes Fixed Point a et b

Si je comprends bien tu as une méthode FixedPoint::from_float(), donc tu dois faire un truc du genre


FixedPoint a,b, c;
a.from_float( 23.009 );
b.from_float( 34.064 );
c = a * b;


mais il faut que tu aies aussi surchargé l'opérateur =;
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 26/04/2023 16:20 | #


Yannis300307 a écrit :
Je ne comprend pas car le code suivant me donne -6.30885 avec 34.68 * 23.809 (j'ai choisi les nombres au pifs )...

FixedPoint operator*(const FixedPoint &a, const FixedPoint &b)
{
    long raw_value = (a.value * b.value);
    return FixedPoint(raw_value / PRECISION);
}

Tu as un overflow.

long long raw_value = (long long)a.value * (long long)b.value;

Deux problèmes :
- Stocker le résultat dans un long ne veut pas dire que le calcul se fait en long. Pour ça il faut que les *opérandes* soient des long.
- Sur la calto un long c'est la même taille qu'un int, il faut un long long.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 26/04/2023 18:22 | #


Lephenixnoir a écrit :
Tu as un overflow.


J'ai adapté ton code et cela marche !

Slyvtt a écrit :
19 bits pour représenter la partie entière et 13bits pour la partie décimale. C'est possible, mais peu habituel


Oui je sais j'ai juste mis ça en attendant que cela marche. Je l'adapterais en fonction de ce qui marche le mieux âpres .
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 27/04/2023 17:02 | #


J'ai réussi à faire afficher quelque chose. J'ai (parfois) des formes qui ressemblent à des carrés mais je ne comprend pas vraiment encore pourquoi cela ne marche pas parfaitement...
ce à quoi ça ressemble ...
Cliquer pour enrouler


WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 27/04/2023 20:47 | #


je vois notamment un truc étrange, ca doit pas etre suffisant pour expliquer ton problème mais on va y aller petit à petit

const FixedPoint HALF_SCREEN_WIDTH = SCREEN_WIDTH / FixedPoint::from_int(2);
const FixedPoint HALF_SCREEN_HEIGHT = SCREEN_HEIGHT / FixedPoint::from_int(2);


me semble louche et serait a priori a remplacer par

const FixedPoint HALF_SCREEN_WIDTH =  FixedPoint::from_int(SCREEN_WIDTH / 2);
const FixedPoint HALF_SCREEN_HEIGHT =  FixedPoint::from_int(SCREEN_HEIGHT / 2);

There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 28/04/2023 17:15 | #


Je ne pense pas qu'il y est de problèmes là car SCREEN_WIDTH et SCREEN_HEIGHT sont déjà des FixedPoint donc je ne pense pas qu'il y a de problèmes de calcul à ce niveau là.

Je viens de commit un fix des operators *= et /= et cela rend le rendu un peu moins bizarre (cela ressemble un peu plus à des cubes et non à des traits sans aucun sens sur l'écran) mais tout est encore déformé et la camera avance par à-coup malgré le fait que le FPS est beaucoup plus rapide (je ne sais pas vraiment comment le décrire). C'est peu-être causé par une grosse perte de précision quelque part mais je dois continuer de chercher ...
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 28/04/2023 19:15 | #


J'ai ajouté une page qui verifie toutes les opérations et elles sont toutes correctes. Le problème vient donc d'un endroit encore plus dure à trouver ...
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 29/04/2023 14:00 | #


J'ai réussi à fix les bugs du renderer ! (voir dernier commit) Je dois encore un peu optimiser mais c'est correct pour l'instant. Les cubes sont bien affichés donc aucun problème sur ce point. Par contre, il y a un bug qui fait que le rendu ne se fait pas lorsqu'on appuie sur la touche pour avancer ... (très étrange comme bug ) Je vais essayer de le fix mais si quelqu'un voit d'où cela peut venir, je lui en serais reconnaissant .

EDIT : Je viens aussi de me rendre compte qu'il y a un bug qui fait que les cubes repassent devant la camera en inversé lorsqu'on les dépasse... (c'est peut-être lié à la disparition du rendu ...)
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 54 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd