1

Voilà j'ai un petit pb, dans un prog C (cible 8/16 bits) j'ai des calculs à faire mais ça bug à moitié parceque (à mon avis) le calcul déborde les 8 bits (même si normalement ça devrait passer)...

exemple :

a=(char)(((int)(b*156))/73);

les résultats (mathématiques) ne dépassent pas 256 donc ça devrait être bon...

j'ai pensé à multiplier par une valeure décimale mais ça marche pas du tout...

merci de m'indiquer les solutions qui à votre sens sont les plus adaptées...


PS : actuellement je fais le calcul en plusieurs étapes de sorte de rester sur 8 bits tout du long...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2

les résultats (mathématiques) ne dépassent pas 256

Mais dépassent-ils 127? Calcule en unsigned.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

je vais essayer merci...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

4

euh... Il y a un probleme dans ton raisonnement...
Tu dis que le résultat ne devrait pas dépasser 256, mais d'abord c'est 255... (na!)
secondo, si tu ne travailles pas en négatif, mets plutot unsigned int que int... ce qui t'offre une valeur possible entre 0, 2-8-1 au lien de -2^7, 2^7-1...
Par contre, regarde ton calcul.. tu multiplies par 156!!!
Donc, il y a un moment où ton calcul dépassera 255, non? Je pense que tu devrais revoir ton calcul et le diviser en des entités plus petites..

Bonne chance, ce n'est pas simple à coder autrement!

5

et si tu procedez autrement ?

sachant que tu travaille pas en décimal tu peut plus ou moins te le permettre (pbm d'arrondis)

Tu fait donc en gros

(x*156)/73 mais c'est egal, t bien d'accord avec moi a x * (156/73) ou

x * 2,136

donc si les qq pbm d'arondi ne te gene pas un simple

x << 1 devrai suffir neutral
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

Au fait, en relisant:
vince
: a=(char)(((int)(b*156))/73);

Quel est l'intérêt du transtypage en int?
1. Les chars sont automaticalement promus en ints si on calcule dessus ("default promotions"). Ceci est valable en C, en C++ et même en Java.
2. Si ce n'était pas le cas, tu transtyperais trop tard vu que le résultat de la multiplication aurait déjà été coupé. (Celle-ci est une erreur très fréquente.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

ouais mais là le pb c'est que c'est du C standard...

par exemple

void ma_func (int ma_var){
// traitement
}

est considéré comme une erreur... roll
faut écrire un truc genre

void ma_func (ma_var)
int ma_var
{
// traitement
}
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

8

Vince > Beau remontage neutral
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

9

vince :
ouais mais là le pb c'est que c'est du C standard...

par exemple

void ma_func (int ma_var){
// traitement
}

est considéré comme une erreur... roll
faut écrire un truc genre

void ma_func (ma_var)
int ma_var
{
// traitement }

Ce n'est pas du C standard ça, c'est du K&R. Bref, ton compilateur est préhistorique. sad Mais je suppose qu'il faudra faire avec...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

Kevin Kofler
:
vince :
ouais mais là le pb c'est que c'est du C standard...

par exemple

void ma_func (int ma_var){
// traitement
}

est considéré comme une erreur... roll
faut écrire un truc genre

void ma_func (ma_var)
int ma_var
{
// traitement }

Ce n'est pas du C standard ça, c'est du K&R. Bref, ton compilateur est préhistorique. sad Mais je suppose qu'il faudra faire avec...

je me suis mal exprimé, les exemples cités auparavent étaient du C standard, le truc que j'utilise est le portage de l'ancètre (y'a moins de fonctionnalités qu'à l'époque...)
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca