PDA

Voir la version complète : Le jeu de la programmation (Canard++)



Pen²
24/08/2007, 12h06
Le principe est simple, soit on poste un code et on doit trouver à quoi il sert (en lisant le code, pas en le compilant sinon c trop facile),
soit on demande l'écriture d'un code le plus optimisé possible en précisant ce qu'il est censé faire.
soit on poste un code avec des fautes à trouver, en précisant le nombre.

A quoi sert cette fonction? La comprenez vous?


float CoinCoin(float number) {
long i;
float x, y;
const float f = 1.5F;

x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}

Phatcobra
24/08/2007, 12h08
précise post réservé aux developpeurs / programmeurs.............. trop dur pour moi ce jeu

Bouyi
24/08/2007, 12h10
Oh putain, un jeu pour les geeks. :mellow:

Kaï ! Kaï ! Kaï ! :wacko:

Pen²
24/08/2007, 12h11
précise post réservé aux developpeurs / programmeurs.............. trop dur pour moi ce jeu

Bon là j'avoue je commence un peu fort, mais c'est un code très célèbre :)

Tim l'enchanteur
24/08/2007, 12h15
précise post réservé aux developpeurs / programmeurs.............. trop dur pour moi ce jeu
précise post réservé aux developpeurs / programmeurs qui ont envie de se prendre la tête.............. trop chiant pour moi ce jeu

(en plus ça me rapelle énormément un prof sadique qui nous posait ce genre de question dans certains exams pour nous faire comprendre à quel point un code lisible est un cadeau... par exemple on avait eu ça, indentation et mise en forme comprise :

#include <stdio.h>
#include <math.h>
double l;main(_,o,O){return putchar((_--+22&&_+44&&main(_,-43,_),_&&o)?(main(-43,++o,O),((l=(o+21)/sqrt(3-O*22-O*O),l*l<4&&(fabs(((time(0)-607728)%2551443)/405859.-4.7+acos(l/2))<1.57))[" #"])):10);})

Bouyi
24/08/2007, 12h42
Bon là j&#39;avoue je commence un peu fort, mais c&#39;est un code très célèbre :)

Ca me rappelle à quel point ma licence d&#39;informatique est loin ... et ne me manque pas du tout :P

Ash_Crow
24/08/2007, 12h57
Je suis sûr que le code dont il faut trouver l&#39;utilité ne sert à rien :)

Pen²
24/08/2007, 13h24
Je suis sûr que le code dont il faut trouver l&#39;utilité ne sert à rien :)
Oh que si il sert, énormément même !

Il a même été écrit par quelqu&#39;un que nous respectons tous :lol:

Hochmeister
24/08/2007, 13h35
La dernière fois que j&#39;ai programmé un truc, c&#39;était sous Locomotive Basic sur Amstrad CPC <_<

Aucune idée, ça fait faire le tour de l&#39;écran aux mots "coin coin" ??

Guest62019
24/08/2007, 13h36
ca sert à multiplier à mettre le paramètre au carré ?

enfin bon c&#39;est surement pas ça......

Tramb
24/08/2007, 13h38
Moi je dis approximation de Newton-Raphson de la racine carrée (ou rsqrt?) avec petite ruse sur la représentation IEEE du flottant, que tout le monde attribue à Carmack, alors que bon...
D&#39;ailleurs ça sert plus à grand chose avec les plateformes x86 modernes, je pense!

A moi de poser une question!

Tramb
24/08/2007, 14h00
Comment tester rapidement si un entier non signé est une puissance de 2?
(Langage au choix)

Pen²
24/08/2007, 14h10
Moi je dis approximation de Newton-Raphson de la racine carrée (ou rsqrt?) avec petite ruse sur la représentation IEEE du flottant, que tout le monde attribue à Carmack, alors que bon...
D&#39;ailleurs ça sert plus à grand chose avec les plateformes x86 modernes, je pense!

A moi de poser une question!
Félicitations !
je suis bluffé de la réponse :)

Hochmeister
24/08/2007, 14h20
Moi je dis approximation de Newton-Raphson de la racine carrée (ou rsqrt?) avec petite ruse sur la représentation IEEE du flottant, que tout le monde attribue à Carmack, alors que bon...
D&#39;ailleurs ça sert plus à grand chose avec les plateformes x86 modernes, je pense!
A moi de poser une question!
:huh:
Mon gars, il va t&#39;arriver des bricoles à parler comme ça ^_^ j&#39;ai compris, je vais ouvrir le topic de la psychopathologie clinique ou on ne sera que quatre à comprendre :XD:

Sinon pour les noob dans mon genre ya moyen (Pen² ou Tramb) d&#39;avoir une petite expliquation propédeutique ???

Pen²
24/08/2007, 14h23
:huh:
Mon gars, il va t&#39;arriver des bricoles à parler comme ça ^_^ j&#39;ai compris, je vais ouvrir le topic de la psychopathologie clinique ou on ne sera que quatre à comprendre :XD:

Sinon pour les noob dans mon genre ya moyen (Pen² ou Tramb) d&#39;avoir une petite expliquation propédeutique ???
Toutes les expliquations ici (http://www.games-creators.org/wiki/Racine_carr%C3%A9_de_John_Carmack)

Tramb
24/08/2007, 14h27
Sinon pour les noob dans mon genre ya moyen (Pen² ou Tramb) d&#39;avoir une petite expliquation propédeutique ???

En fait c&#39;est l&#39;application d&#39;une méthode itérative (mathématique) pour approximer uen fonction (ici la fonction racine carrée) appellée méthode de Newton-Raphson.
http://fr.wikipedia.org/wiki/Méthode_de_Newton

La seule finesse est qu&#39;il fait apparaître un nombre magique (le 0xbidule) qui a l&#39;air de venir de nulle part pour faire dans le domaine des entiers un calcul plutôt que dans le domaine de la virgule flottante en se basant sur la représentation des flottants( http://en.wikipedia.org/wiki/IEEE_754 ), c&#39;est là que ça rend le code beaucoup plus imbitable et un peu plus rapide, et c&#39;est plutôt malin! :w00t:

Daeke
24/08/2007, 14h30
Comment tester rapidement si un entier non signé est une puissance de 2?
(Langage au choix)
Rapidement je sais pas mais je pense qu&#39;on peut jouer avec les décalages :

int verif(uint num) {
while(num && !(num&1))
num = num >> 1;
return !num;
}

Bouyi
24/08/2007, 14h41
Il a même été écrit par quelqu&#39;un que nous respectons tous :lol:

Ah parce que tu respectes carmack toi ? :mellow:

Pen²
24/08/2007, 15h04
Ah parce que tu respectes carmack toi ? :mellow:

à fond, c&#39;est mon idole!
j&#39;ai même des posters de lui dans ma chambre

Bouyi
24/08/2007, 15h06
à fond, c&#39;est mon idole!
j&#39;ai même des posters de lui dans ma chambre

Oh la mega lose. :ninja:

elpaulo
24/08/2007, 15h08
et tu manges des céréales "crousti-carmack" au ptit dej&#39; ?

Pen²
24/08/2007, 15h25
et je suis allé spécialement en Allemagne pour trouver un coiffeur capable de me faire sa coifure.

Tramb
24/08/2007, 16h03
Rapidement je sais pas mais je pense qu&#39;on peut jouer avec les décalages :

int verif(uint num) {
while(num && !(num&1))
num = num >> 1;
return !num;
}

Y&#39;a une solution sans boucle! Sauras-tu la trouver? :)
Je précise qu&#39;on ne gère pas le cas avec la valeur d&#39;entrée 0.

DaP
27/08/2007, 17h02
Comment tester rapidement si un entier non signé est une puissance de 2?
(Langage au choix)

En gérant le cas zéro :
typedef int bool;

int main (void)
{
unsigned int nb;
bool resultat;

resultat = !(nb & (nb-1)) && nb;

return 0;
}

Mais je l&#39;ai pas trouvé moi-même, je le connaissais avant. :unsure:
Pour ceux qui ne comprennent pas, nb & (nb-1) est une technique pour calculer un modulo par une puissance de 2.


Comment trouver le maximum de deux nombres sans faire de test ?

Edit : quand je dis "sans test", c&#39;est sans que le processeur fasse de branchement. En C ça doit revenir à se débrouiller avec la valeur de retour d&#39;une comparaison...

finsh
27/08/2007, 17h29
http://i0005.photobucket.com/albums/0005/icanhascheezburger/2007/6/12/1/128261114448593750lolcatalignr.jpg

yaka
27/08/2007, 17h52
HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

DaP
27/08/2007, 19h22
Rapidement je sais pas mais je pense qu&#39;on peut jouer avec les décalages :

int verif(uint num) {
while(num && !(num&1))
num = num >> 1;
return !num;
}
Je ne comprends pas ton code, il marche ? D&#39;après ce que je comprends, si num est nul, on ne passe pas dans la boucle et verif() retourne 1, sinon on décale jusqu&#39;à ce que le lsb soit égal à 1, et verif() retourne 0.

ducon
27/08/2007, 19h43
Comment trouver le maximum de deux nombres sans faire de test ?

Avec une valeur absolue.
max(a,b⁠)=(a+b+|a−b|)/2.
min(a,b⁠)=(a+b−|a−b|)/2.
Pour comprendre, faites un dessin et placer le milieu (a+b⁠)/2, auquel vous ajoutez ou vous soustrayez la moitié de la distance entre a et b, à savoir |a−b|/2. Ensuite, on factorise.
Cela dit, je doute que le calcul de la valeur absolue ne fasse pas intervenir de test.

Toxic
27/08/2007, 19h47
Je ne fais pas de programmation, mais à tout hasard je propose Martian Gothic.

DaP
27/08/2007, 20h52
Avec une valeur absolue.
max(a,b⁠)=(a+b+|a−b|)/2.
min(a,b⁠)=(a+b−|a−b|)/2.
Pour comprendre, faites un dessin et placer le milieu (a+b⁠)/2, auquel vous ajoutez ou vous soustrayez la moitié de la distance entre a et b, à savoir |a−b|/2. Ensuite, on factorise.
Alors il faut trouver la valeur absolue sans faire de test. :happy2: (je viens de regarder le code de abs() dans la DLL de Windows, elle utilise un branchement)
En fait si on sait que l&#39;ordinateur a au moins un Pentium 2 on peut utiliser le jeu d&#39;instructions prévu pour ça, ça donne un truc du genre :


; On stocke dans ECX le nombre le plus grand entre EAX et EBX
mov ecx, eax
cmp eax, ebx
cmovb ecx, ebx

Sinon on peut chipoter avec un booléen qui représente le résultat d&#39;une condition (si le compilateur est malin il utilise SETCC) et un masque pour avoir le bon résultat. Je laisse encore un peu chercher. :ninja:

Avec ta solution on peut faire comme ça :


int a, b, abs, max;
int const masque = (a-b) >> 31;

abs = a - b;
abs = (abs ^ masque) - masque;

max = (a + b + abs) / 2;

A part le fabs du FPU je ne connais pas d&#39;autre moyen de trouver la valeur absolue.

Daeke
27/08/2007, 21h23
Je ne comprends pas ton code, il marche ? D&#39;après ce que je comprends, si num est nul, on ne passe pas dans la boucle et verif() retourne 1, sinon on décale jusqu&#39;à ce que le lsb soit égal à 1, et verif() retourne 0.
Non il ne marche pas (du tout ;p) mais c&#39;était pour expliquer un peu mieux ma pensée (qui était en gros : utiliser une boucle et des décalages).

ducon
27/08/2007, 21h36
Et comment crois-tu que le processeur compare eax et ebx ? Avec un test pardi.
Pour le maximum, on est coincé, je dirais même mathématiquement, à utiliser quelque part un test.

DaP
27/08/2007, 23h34
Je n&#39;ai pas été assez explicite, je parlais d&#39;éviter les branchements. CMP fait juste une soustraction sans sauvegarder le résultat et positionne les flags de statut. Voilà un exemple qui n&#39;utilise aucune instruction de test (SETA copie !CF dans CL) :


xor ecx, ecx
mov eax, 10 ; a
mov ebx, 20 ; b

cmp eax, ebx
seta cl ; ecx = (a > b) ? 1:0
neg ecx ; FF:0

sub eax, ebx
and ecx, eax ; a-b:0

add ecx, ebx ; a:b

L&#39;équivalent en C :


int a, b, max;
max = (-(a > b) & (a-b)) + b;

Tu relances ?

Tramb
27/08/2007, 23h57
Bon les setcc à la place des branchements c&#39;est un peu tricher quand même pour ce genre de truc mais bon ;-)

Si on veut le faire avec des opcodes plus vieillot, la valeur absolue peut se calculer comme ça (idiomatique, j&#39;ai rien inventé):


cdq
xor eax, edx
sub eax, edx

Question suivante alors?

Mmmh... Allez...
Comment faire une division par 3... sans division? :happy2:
Edit : Entière la division hein.

ducon
28/08/2007, 07h38
DaP, d’après toi, a>b est un test, ou pas ? :mrgreen:
Il suffit de voir la définition de la valeur absolue pour voir qu’on est coincé et qu’on devra faire appel à un test, de gré ou de force, à un moment ou à un autre.

Pour obtenir le reste, on peut additionner tous les chiffres, comme pour la preuve par neuf.

DaP
28/08/2007, 18h08
Solution bourrine (entrée dans EAX, sortie dans EDX) :


mov edx, 0AAAAAAABh
mul edx
shr edx, 1


DaP, d’après toi, a>b est un test, ou pas ? :mrgreen:
Il suffit de voir la définition de la valeur absolue pour voir qu’on est coincé et qu’on devra faire appel à un test, de gré ou de force, à un moment ou à un autre.
Bien sûr, mais c&#39;était un peu évident que je parlais de ne pas faire de branchement pour que le programme ne suive qu&#39;un chemin quoi qu&#39;il arrive. Pour le (a > b), ça dépend de ce que le compilateur en fait.

Tramb
28/08/2007, 22h07
Si tu as une meilleure solution je suis preneur.
Bah meilleure solution, non, c&#39;est un truc clairement convolué mais comme le disait ducon:

max(a, b) = ((a+b) + abs(b-a))/2
min(a, b) = ((a+b) - abs(b-a))/2

et tu peux calculer le abs avec le

cdq
xor eax, edx
sub eax, edx

Bon c&#39;est tordu hein... mais sauf erreur ça tourne dès le 386 :happy2:

(et bien joué pour le div by 3, pratique pour trouver un nombre de triangles à partir du nombre de vertex)
A toi de balancer des questions DaP!

DaP
28/08/2007, 22h20
Ben je comptais sortir ça (http://www.linux-kheops.com/doc/ansi-c/node29.htm#SECTION003210000000000000000) mais je n&#39;arrive pas à le compiler, et j&#39;ai pas trop envie d&#39;essayer de comprendre non plus. :wacko:
Alors une connue : comment interchanger deux valeurs sans passer par une variable intermédiaire ?

Tramb
28/08/2007, 22h25
Alors une connue : comment interchanger deux valeurs sans passer par une variable intermédiaire ?

Bon je réponds pas sur celle là, quelqu&#39;un doit bien connaître ça dans le coin!

Ghost Line
28/08/2007, 23h56
Je vois bien un truc du genre :

a = valeur1
b = valeur2

a+b=b
b-a=a
b-a=b

En algo complet ;)

edit : ça me fait penser aux Tours de Hanoï ...

edit 2 : je suis ARL moi, pas Dev boudiou ^^

DaP
29/08/2007, 00h17
Ca marche, je connaissais pas. ;)

On peut aussi faire avec des XOR :


int a = 5, b = 2;

a ^= b;
b ^= a;
a ^= b;

A toi !

Ghost Line
29/08/2007, 06h22
Ca marche, je connaissais pas. ;)

On peut aussi faire avec des XOR :


int a = 5, b = 2;

a ^= b;
b ^= a;
a ^= b;

A toi !

Houla, je passe mon tour ! je suis juste un gros curieux en prog, je n&#39;ai pas de onnaissances particulières ! je suivrais le topic avec plaisir, mais je ne me sens pas capable de créer une énigme, dsl ;)

ducon
29/08/2007, 08h39
int zongo(int n)
{
{
int result = n,i;
for(i=2;i*i <= n;i++)
{
if (n % i == 0) result -= result / i;
while (n % i == 0) n /= i;
}
if (n > 1)
result -= result / n;
return result;
}
}

Tramb
29/08/2007, 12h13
int zongo(int n)
{
{
int result = n,i;
for(i=2;i*i <= n;i++)
{
if (n % i == 0) result -= result / i;
while (n % i == 0) n /= i;
}
if (n > 1)
result -= result / n;
return result;
}
}

J&#39;ai beau relire ce truc, j&#39;en ai aucune idée :blink:

ducon
29/08/2007, 12h22
C’est un truc de matheux.

Tramb
29/08/2007, 13h42
C’est un truc de matheux.

Si n est premier, ça renvoie n-1.
En fait ça pourrait presque être un truc qui renvoie le plus gros facteur mais non.
J&#39;arrive pas à capter ce que ça fait.
Un p&#39;tit indice? :siffle:

ducon
29/08/2007, 13h44
Si n est premier, ça renvoie n-1.

Exact.
Tu connais beaucoup de fonctions qui renvoient n−1 si n est premier ?


J&#39;arrive pas à capter ce que ça fait.
Un p&#39;tit indice? :siffle:

Et si n est composé du produit de deux nombres premiers ? Ou alors d’une puissance d’un seul nombre premier ?

elpaulo
29/08/2007, 13h56
putain les gars arretez tout quoi :ninja:

ducon
29/08/2007, 13h59
T’es un geek, toi ?

elpaulo
29/08/2007, 14h01
quand je vois ce topic, je me dis que finalement non :happy2:

Tramb
29/08/2007, 14h13
Exact.
Tu connais beaucoup de fonctions qui renvoient n−1 si n est premier ?
Et si n est composé du produit de deux nombres premiers ? Ou alors d’une puissance d’un seul nombre premier ?

Mmmh! Ca a l&#39;air de faire ça:
Soit n = produit sur i des ai^pi (ai, premiers)
zongo(n) = produit sur i des (ai-1)*ai^(pi-1)

Ah. Ca a l&#39;air d&#39;être l&#39;indicateur d&#39;Euler en fait après un peu de recherche sur le net, le nombre de nombres inférieurs premiers avec n!

(Disclaimer : on va dire que l&#39;arithmétique est pas ma compétence la plus forte en maths <_< )

ducon
29/08/2007, 14h16
C’est ça.
Ça s’appelle l’indicatrice d’Euler, et c’est noté ϕ(n).

Tramb
29/08/2007, 14h17
C’est ça.
Ça s’appelle l’indicatrice d’Euler, et c’est noté ϕ(n).
Ah ben je venais de voir ça :)

(Cool on peut copier des caractères chelous sur le forum : ط بقناة العربية يقدم على مدار الساعة ال)

ducon
29/08/2007, 14h28
(Cool on peut copier des caractères chelous sur le forum : ط بقناة العربية يقدم على مدار الساعة ال)

Ce qui veut dire ?

elpaulo
29/08/2007, 14h54
que tu ne comprend pas les caracteres chelous :smile:

Tramb
29/08/2007, 15h36
que tu ne comprend pas les caracteres chelous :smile:

...et que j&#39;ai copié du texte de google sans savoir ce que c&#39;était.

ducon
29/08/2007, 18h42
En fait, cette fonction compte le nombre de nombres plus petits que n qui sont premiers avec n, c’est-à-dire sans facteur commun avec n.

DaP
29/08/2007, 19h18
Et qui relance dans tout ça ? :happy2:

ducon
29/08/2007, 19h24
Je peux vous trouver une autre fonction mathématique, si vous voulez.

Phatcobra
29/08/2007, 19h27
à fond, c&#39;est mon idole!
j&#39;ai même des posters de lui dans ma chambre

C&#39;est à cause de gars comme toi (les geeks) que les filles ont "peur" des mecs comme moi (les gamers)

DaP
29/08/2007, 19h35
Je propose d&#39;écrire un algorithme qui arrondit un nombre à un multiple d&#39;une puissance de 2 donnée.

Edit : le mien arrondit seulement dessus (normal c&#39;est prévu pour aligner l&#39;adresse d&#39;une zone mémoire), si quelqu&#39;un trouve mieux...

Tramb
29/08/2007, 19h46
Toxic, je t&#39;adore !!! et faut vraiment que je teste ce jeu dont tu parles tout le temps
C&#39;est à cause de gars comme toi (les geeks) que les filles ont "peur" des mecs comme moi (les gamers)

Un gamer, c&#39;est pas un geek qui en plus ne connait rien à l&#39;informatique?

Phatcobra
29/08/2007, 19h51
Un gamer, c&#39;est pas un geek qui en plus ne connait rien à l&#39;informatique?


ah non monsieur !!

********************
Un geek (terme anglais (http://fr.wikipedia.org/wiki/Anglais) ) est un stéréotype décrivant une personne passionnée, voire obsédée, par un domaine précis, généralement l&#39;informatique. Le type même du geek sont les premiers de la classe, à profil scientifique, férus de superhéros et de science-fiction.
À l’origine, en anglais le terme signifiait « fada », soit une variation argotique (http://fr.wikipedia.org/wiki/Argot) de « fou », « crétin ». D’abord péjoratif (http://fr.wikipedia.org/wiki/P%C3%A9joratif) ─ son homographe (http://fr.wikipedia.org/wiki/Homographe) désigne un clown de carnaval ─ il est maintenant revendiqué par certaines personnes. Le terme est voisin de l’argot estudiantin polar (toujours plongé dans un polycopié).


Un hardcore gamer, terme anglais que l&#39;on peut interpréter par « joueur inconditionnel », désigne un joueur qui s&#39;implique énormément dans un jeu vidéo (http://fr.wikipedia.org/wiki/Jeu_vid%C3%A9o). Il joue beaucoup, et par exemple peut passer ses journées à tenter d&#39;obtenir de meilleurs scores seul ou en équipe, souvent contre d&#39;autres joueurs ou d&#39;autres équipes et explore un jeu entièrement pour en dénicher ses subtilités. Le hardcore gamer s&#39;apparente au power user (http://fr.wikipedia.org/wiki/Power_user) qui achète le meilleur matériel électronique (informatique (http://fr.wikipedia.org/wiki/Informatique), console de jeux vidéo (http://fr.wikipedia.org/wiki/Console_de_jeux_vid%C3%A9o)).
*********************


tu vois la nuance ???
Je suis pas un boutonneux premier de la classe ;)

Pen²
29/08/2007, 19h52
C&#39;est à cause de gars comme toi (les geeks) que les filles ont "peur" des mecs comme moi (les gamers)
et yen a qui ont du mal à comprendre le second degré :mellow:

Phatcobra
29/08/2007, 19h55
et yen a qui ont du mal à comprendre le second degré :mellow:


oulala !! mais c&#39;est du 3eme ça :rolleyes:

ducon
29/08/2007, 19h56
Bon, puisque ça fl00de, hop :

function Zongo (m, n: integer): integer;
begin
if m = 0 then
Zongo := n + 1
else
if n = 0 then
Zongo := Zongo (m - 1, 1)
else
Zongo := Zongo (m - 1, Zongo (m, n - 1));
end;

Tramb
29/08/2007, 19h57
tu vois la nuance ???
Je suis pas un boutonneux premier de la classe ;)

Oui, je cerne bien la nuance!
En fait un gamer c&#39;est un boutonneux, mais dernier de la classe! :happy2:

Phatcobra
29/08/2007, 19h59
Oui, je cerne bien la nuance!
En fait un gamer c&#39;est un boutonneux, mais dernier de la classe! :happy2:


non, un premier de la classe, cool, dans le vent, avec des filles magnifiques aux appats généreux (&#39;tention, tink veille) mais qui cachent sa passion des jeux vidéos car ça plait pô aux bimbos B)

j&#39;arrete de pourrir votre topic ou je ne scorerai jamais :cry:

Tramb
29/08/2007, 20h01
non, un premier de la classe, cool, dans le vent, avec des filles magnifiques aux appats généreux (&#39;tention, tink veille) mais qui cachent sa passion des jeux vidéos car ça plait pô aux bimbos B)

j&#39;arrete de pourrir votre topic ou je ne scorerai jamais :cry:

Et oui on est tous obligés de vivre incognito nos passions car elles choquent nos contemporains (je pense au jeu, à la programmation, et au fistfucking).

Phatcobra
29/08/2007, 20h03
(je pense au jeu, à la programmation, et au fistfucking).
:wub:

viens mardi au fucking blue boys, je suis Blackmanba :rolleyes:

Tramb
29/08/2007, 20h04
:wub:

viens mardi au fucking blue boys, je suis Blackmanba :rolleyes:

C&#39;est toi le 7ème en partant de la gauche au mur de bites?

Phatcobra
29/08/2007, 20h05
C&#39;est toi le 7ème en partant de la gauche au mur de bites?


non, lui c&#39;est petit orvet .
Moi, c&#39;est le quatrieme en partant de la gauche, celle avec des pustules, de l&#39;herpes et des champignons de paris :siffle:

Pen²
29/08/2007, 20h29
Zongo = la fonction d&#39;Ackerman

en Scheme :)

(define (A m n)
(cond ((= m 0) (+ n 1))
((= n 0 ) (A (- m 1) 1))
(else (A (- m 1) (A m (- n 1))))))

ducon
29/08/2007, 20h37
Ouais, cette fois c’était un classique.

Pen²
29/08/2007, 21h02
encore un bel algorithme bien lisible


unsigned long s1, s2, s3, b

double pouet()
{
b = (((s1 << 13) ^ s1) >> 19);
s1 = (((s1 & 4294967294) << 12) ^ b);
b = (((s2 << 2) ^ s2) >> 25);
s2 = (((s2 & 4294967288) << 4) ^ b);
b = (((s3 << 3) ^ s3) >> 11);
s3 = (((s3 & 4294967280) << 17) ^ b);
return ((s1 ^ s2 ^ s3) * 2.3283064365e-10);
}

DaP
29/08/2007, 21h27
A quoi ça sert de chercher à comprendre des trucs aussi crades ? :blink:

ducon
29/08/2007, 22h16
Si tu veux, je te trouve du code en BrainFuck, hein.

Pen²
29/08/2007, 23h06
Si tu veux, je te trouve du code en BrainFuck, hein.

excellent le BrainFuck, je connaissais pas. Le ook a l&#39;air pas mal non plus.

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
C&#39;est un Hello World parait-il.


Bon sinon mon code n&#39;était pas totalement inutile, c&#39;est un générateur de nombres pseudo aléatoire de Von Neumann.

bill_baroud
30/08/2007, 15h47
Mmmh... Allez...
Comment faire une division par 3... sans division? :happy2:
Edit : Entière la division hein.

ouaais, ca je connais :w00t:
Je cite un rapport de stage :ninja:

La multiplication de deux entiers de 16-bits peut se décomposer comme suis :

a*b = low(a*b) + high(a*b) << 16
ce qui implique :

high(a*b) = (a*b) >> 16 = (a*b)/(1<<16)
En MMX, l’instruction pmulhw permet de calculer la partie haute high(a*B) de cette
opération. Si l’on choisit b=(1<<16)/N, on vérifie :

high(a*b) = (a*b) >> 16
= (a*b)/(1<<16)
= (a*(1<<16)/N)/(1<<16)
= a/N
Ce qui donne un truc genre :

unsigned short mmxdividebyN[4];
for(i=0; i<4; i++) {
mmxdividebyN[i] = (unsigned short)((1u << 16)/taille);
}
__asm {
movq mm5, [mmxdividebyN]
movq mm0, [esi]
; ... opérations d’accumulation diverses
pmulhw mm0, mm5; division par taille
}

elpaulo
30/08/2007, 15h53
j&#39;adore le smiley en plein milieu :smile:

ducon
30/08/2007, 15h53
Sans division ? Ben tu reprogrammes l’algorithme de la division, à savoir une soustraction répétée. :ph34r:

Ghost Line
30/08/2007, 21h50
Mmmmm ...

Méthode gorette inside :

Phase déclarative :
soit A mon chiffre à diviser
soit B mon diviseur
soit C mon résultat hypothétique

Programme :
C = B
Si C * B = A ou C * B = A+1 ou C * B = A+2 ou C * B = A-1 ou C * B = A-2 alors
fin du porcgramme
Sinon
C = C + B
FinSi

Je sais, ça pue, ça ne marche que pour les entiers et c&#39;est uniquement vrai pour 3. Et je vous merde :)


si

half
31/08/2007, 02h17
float CoinCoin(float number) {
long i;
float x, y;
const float f = 1.5F;

x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}J&#39;ai trouver l&#39;utilité de la fonction du premier post !!!

Cela sert a calculer une racine carré non ?

Cartman
31/08/2007, 03h37
C&#39;est une extension du topic du kamoulox, c&#39;est ca?

ducon
31/08/2007, 08h28
J&#39;ai trouvé l&#39;utilité de la fonction du premier post !!!
Cela sert a calculer une racine carré non ?

Oui, mais tu arrives après la guerre.

half
31/08/2007, 16h03
Erf dommage

DaP
04/09/2007, 23h21
Tentative de relance :


int foo (unsigned int param)
{
static unsigned int a[] =
{
0x55555555,
0x33333333,
0x0F0F0F0F,
0x00FF00FF,
0x0000FFFF
};

unsigned int b, i;

for (i = 0, b = 1; i < 5; i++, b *= 2)
{
param = (param & a[i]) + ((param>>b) & a[i]);
}

return param;
}

ducon
04/09/2007, 23h51
Ça calcule le nombre de 1 dans la décomposition en base 2 ?

XWolverine
04/09/2007, 23h52
Encore un truc porno qui compte les bits :happy2:

Edit : Oups, Ducon, comme tu causes bien :ninja:

DaP
04/09/2007, 23h54
Celui qui veut peut relancer. :siffle:

Flappie
04/09/2007, 23h58
OK alors on va baisser un peu le niveau, comme ça tout le monde a sa chance, hop !

int foo (unsigned int param)
{
param = (param *3);
return param;
}

^_^

XWolverine
04/09/2007, 23h59
Je t&#39;en prie, Ducon, je suis trop vieux pour ces conneries :happy2:

ducon
04/09/2007, 23h59
Ouais, mais j’ai triché, j’ai compilé le truc, plus un petit script shell.


> for (( i=1; $i <= 50; i++ )); do echo -n "$i "; ./essai $i; done

:siffle:

Flappie
05/09/2007, 00h00
Ouais, mais j’ai triché, j’ai compilé le truc, plus un petit script shell.

Ahem, ahem...

Extrait des règles :

Le principe est simple, soit on poste un code et on doit trouver à quoi il sert (en lisant le code, pas en le compilant sinon c trop facile)

ducon
05/09/2007, 00h03
Cela dit, vu la structure des nombres du tableau, ça ressemble à un machin dyadique, et les tests ressemblent au passage d’un peigne : on chope les 1 en commun. Je n’ai pas compris comment ce truc itéré marche.
Et même en le compilant, il fallait deviner.
Bon, je passe. ;)

DaP
05/09/2007, 01h24
Et même en le compilant, il fallait deviner.
Ouais mais ça a plus grand&#39;chose à voir avec la programmation du coup. :| Pour le fonctionnement c&#39;est simple, elle calcule le nombre de bits dans chaque doublet puis chaque quadruplet, chaque octet, etc.
J&#39;ai pas d&#39;idée pour la suite , je chercherai demain. :zzz: