MSX Village forum

La Place des Développeurs MathTable Un petit outil pour générer des tables de mathématiques précalculés

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 07/11/2020 à 23h33
Comme discuté sur le fil de discussion de Fusion-C, j'ai créé un outil pour générer des tables de pré-calcul mathématique.
Je créé un fil de discussion distinct pour ne pas polluer celui de Fusion-C avec des discussions spécifiques à cet outil.

Pour ceux qui se demanderaient à quoi ça sert !? :hum, ça créé des tableaux (C ou Assembleur) avec des valeurs précalculées d'opération mathématique trop lourde à faire sur un Z80.
Par exemple, un simple calcul de distance entre 2 points fait intervenir une racine-carrée, très couteuse en calcul. Avec le tableau qui va bien (sqrt), c'est quasiment gratos (à quelques shifts prêt).

Voici l'outil : MathTable_1_3.zip (version 1.3)

La doc :
Code BASH :
 
Usage: mathtable [options] [tables]
Options:
   -num   <x>       Entries Number (Precision. Default=128)
   -shift <x>       Shift value (Fixed-point position. Default=4)
   -bytes <x>       Bytes Number (1: 8bits, 2: 16 bits. Default=2)
   -prefix x        Table name prefix (0: Disable. Default=g_)
   -format x        Output file format (C or ASM. Default=C)
   -help            This help
Tables:
   sin              Sinus table [0:Pi*2]
   cos              Cosinus table [0:Pi*2]
   tan              Tangente table [-Pi/2:Pi/2]
   asin             Arc-sinus table [-1:1]
   acos             Arc-cosinus table [-1:1]
   atan             Arc-tangente table [-num:num]
   sq               Square table [0:1]
   sqrt             Square-root table [0:num]
   proj W H         3d projection tables (W/H: screen width/height)
   rot              Rotation vector table
   equa A B C D E   Equation of type y=A+B*(C+x*D)^E
 


Par exemples :
Code BASH :
MathTable.exe -num 64 -bytes 2 -shift 8 sin cos  > Generated\trigo_64.inc

Créer des tables de 64 entrée pour les Sinus et les Cosinus stocké sur des WORD (2 bytes) avec une virgule-fixe de 8 bits -- c'est ça dire que les 8 bits forts sont pour la partie entière et les 8 bits faible pour la partie décimale -- et les stocker dans le fichier trigo_64.inc.

Le .zip contient l'outil (mathtable.exe) et différents tableaux pré-générés dans le répertoire /generated/.

Si vous voyez d'autres opérations qui pourraient être utile ou si vous avez des retours, je suis tout ouïe. :)


On est toujours ignorant avant de savoir.
Github    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5886

Le 08/11/2020 à 02h01
Ce post a attiré mon attention car, il est vrai que pour une utilisation basic, même en programmation, enfin pour mon humble niveau en Basic, je n'ai jamais fait d'opérations de calcule plus évolué que les 4 opérations de base, au point d'ignorer la possibilité même d'une racine carré sous Basic avec un Msx.

Rapide recherche sur le Net : fonction SQR en Basic.
https://www.auditsi.eu/?p=1707

L'anecdote étant que la personne qui m'a acheté mon premier 700 était Fan de calcule de probabilité et recherchait une machine simple a programmer :tea

C'est si lourd que ça une racine carré pour un Z80 ? :)



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5566

Le 08/11/2020 à 08h05
@turboseb : Oui, les calcul à virgule flottante sont très gourmand pour les ordinateurs 8bits. Et encore le Z80 avec ses registres 16bits s'en sort mieux qu'un MOS 6510 (Commodore 64), ou un MOS 6502 (Apple 2)

@aoineko: merci je vais regarder cet outil avec attention. Peux tu fournir le source code de l'outil pour une compilation sur MacOS / Linux ?
Peux tu mettre un exemple d'utilisation d'une table ? Par exemple Cos/Sin pour dessiner un cercle ? Edité par ericb59 Le 08/11/2020 à 08h07


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 08/11/2020 à 10h33
@turboseb : En fait, les ordinateurs sont tout simplement incapables de faire la plupart des opérations mathématiques : la raciné carré, mais même la division !
Du coup, il a des algorithmes qui remplacent ces opérations simples qu'on utilise dans les langages évoluées par une multitude de petites opérations. Pour la division, il me semble qu'on peut obtenir un résultat exacte, mais pour la racine carrée par ex., on utilise des suites mathématiques qui à force d'itération vont finir par converger vers le bon résultat. Du coup, si tu veux un résultat un minimum précis, ça peut devenir vraiment très couteux. Les tables précalculés ont le gros avantage d'avoir une précision optimale pour cout quasi-nul coté CPU (le cout est dans l'occupation mémoire des tables).
Après, on peut faire un très bon jeu sans opération mathématique complexe. ^^ Mais ça ouvre de nouvelles possibilités.

@ericb59 : Comme je t'ai dis sur le fil Fusion-C, je te ferais un exemple directement dans ta lib comme ça tu pourras l'ajouter au package. Je peux le faire en 1.2, mais si la 1.3 est presque prête, il me semble que ça serait plus intéressant de le faire avec la nouvelle version. Et oui, je peux évidemment fournir le code source sous soucis (je vais juste y faire un peu de ménage pour qu'il soit bien lisible).


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 08/11/2020 à 15h04
Petite question pour les afficionados de l'assembleur : quelles sont les formats texte les plus courants pour les données ?
Pour la définition d'un byte, j'ai trouvé db ou .db.
Pour les valeurs, c'est le gros bordel. J'ai trouvé du FFh, 0xFF, #FF et $FF !!
Les quels sont supportés par les outils MSX ?

Pour SDCC, 123 pour les décimales et 0xFF pour l'hexa (précédé d'un # quand c'est du code ASM intégré dans un fichier C).
Par contre, je sais pas du tout pour les autres outils :hum


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5566

Le 09/11/2020 à 20h41
Citation :
Par contre, je sais pas du tout pour les autres outils


Ca dépend des compileurs, il n'y a pas vraiment de règle apparemment.


banniere-ericb59e
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie