1

BUT:
Calculer pour x (unsigned long),

y = (unsignedLong ) ((double)(x-0.5)*0.38) ?

CONTRAINTE:
Calcul exact. Pas d'overflow.
Pas de double (La prec d'un double est plate-forme dependante).

Ma solution:
(x / 50) * 19 + ((x%50) * 19 - 25 + 50 ) / 50 - 1

D'autres solutions plus simples ?

2

Arrondi au plus proche ? (flemme de lire ta solution)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

Flemme de lire l'enonce aussi.

4

confus
Ou alors la virgule de la première ligne est mal placée.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

Arrondi au plus proche de (x*0.38) - 1

6

Euh ça n'a absolument rien à voir avec ce que tu as écrit, alors... (tu veux la partie entière de x*0.38-0.5, d'après ./5) Et ton énoncé ne précisait même pas le type de ce que tu voulais smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

Corrige. Satisfait ?

8

Ben non, (x-0.5)*0.38 != x*0.38-0.5 confus

D'autant plus que tu as un pb de priorité : tu voulais probablement dire (ulong)((x-0.5)*0.38) et pas (ulong)(x-0.5)*0.38 (qui veut dire ((ulong)(x-0.5))*0.38)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

9

Recorrige. Ca m'avance beaucoup ce que tu dis la.

10

Euh attends tu lis mes posts en entier là ? neutral
Pollux :
Euh ça n'a absolument rien à voir avec ce que tu as écrit, alors... (tu veux la partie entière de x*0.38-0.5, d'après ./5)
Pollux :
Ben non, (x-0.5)*0.38 != x*0.38-0.5 confus


Donc je répéte au cas où l'intersection de ce post et de ce que tu liras serait non vide : ./5 parle de floor(sub(mul(x,0.38),0.5)) alors que ./1 parle de floor(mul(sub(x,0.5),0.38)) (je prend une représentation non-ambiguë avec des arbres, comme ça pas d'excuse), ce qui n'est manifestement pas la même chose.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

Je parle bien de floor(mul(sub(x,0.5),0.38)) . tu me cherches la?
./5 est une connerie.

12

Ben il suffisait de le dire... Ca te prenait 5 secondes et ça évitait que je te repose la question 50 fois neutral


Bon j'ai fait le calcul indépendamment et je trouve q = x/50*19 + (19*(x%50)+40)/50 - 1, ce qui m'a l'air de revenir sensiblement à la même chose que toi (sauf qu'on a pas la même chose pour la constante à ajouter à x%50*19, l'un de nous deux a dû se planter, ou tu t'es plus probablement emmêlé les pinceaux entre ./1 et ./5 tongue) Je pense pas qu'on puisse vraiment faire plus simple, on sera de toute façon plus ou moins obligé de calculer à la fois x%50 et x/50, et le reste vient de lui-même après.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

13

Ok je me suis trompe, mais c'est pas plutot:

q = x/100*38 + (38*(x%100)+100-19)/100 - 1

?

14

Les deux sont équivalents.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

y = (unsigned long) (((unsigned long long)x<<1-1ull)*19ull/100ull) smile
Mais ça ne garantit le non-overflow que pour des nombres qui tiennent dans la taille minimum d'un unsigned long (32 bits). Avec un long 64 bits, il peut y avoir des débordements. Mais tu peux t'arranger avec __int128 si tu as GCC 3.4 64 bits (ou M$VC 64 bits).
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é

16

je suis pas sûr que ça soit le genre de solution que veut PpHd, parce que je pense qu'il serait assez grand pour y penser tout seul wink et le jour où il voudra faire ça avec des nbs 128 bits, il devra faire sa lib de calcul 256 bits ? couic

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

17

Precision: ca doit fonctionner en C K&R. Moi je fais des trucs portables tongue

18

En plus, je pense que si les long long sont émulés en software, la solution 32 bits est bien plus efficace (un div-mod, une multiplication, une lookup table à 50 entrées et une addition)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

M'en fous un peu que ca soit rapide. C'est pour donner en parametre a une fonction qui prend pres de 100000 cycles sur un Athlon. Alors, je suis pas a 100 cycles pres pour calculer l'entree.

20

PpHd
: M'en fous un peu que ca soit rapide. C'est pour donner en parametre a une fonction qui prend pres de 100000 cycles sur un Athlon. Alors, je suis pas a 100 cycles pres pour calculer l'entree.


Ca fais plusieurs topic que je lis te concernant, et a chaque fois, la meme question me reviens.

Tu cherche a faire quoi, pour avoir des fonctions aussi lourdes? confus

21

Des fonctions de calcul flottantes + d'autres trucs que je fais en bonus.

22

ok.