Voir la version complète : Le jeu de la programmation (Canard++)
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, 11h08
précise post réservé aux developpeurs / programmeurs.............. trop dur pour moi ce jeu
Oh putain, un jeu pour les geeks. :mellow:
Kaï ! Kaï ! Kaï ! :wacko:
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, 11h15
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);})
Bon là j'avoue je commence un peu fort, mais c'est un code très célèbre :)
Ca me rappelle à quel point ma licence d'informatique est loin ... et ne me manque pas du tout :P
Ash_Crow
24/08/2007, 11h57
Je suis sûr que le code dont il faut trouver l'utilité ne sert à rien :)
Je suis sûr que le code dont il faut trouver l'utilité ne sert à rien :)
Oh que si il sert, énormément même !
Il a même été écrit par quelqu'un que nous respectons tous :lol:
Hochmeister
24/08/2007, 12h35
La dernière fois que j'ai programmé un truc, c'était sous Locomotive Basic sur Amstrad CPC <_<
Aucune idée, ça fait faire le tour de l'écran aux mots "coin coin" ??
Guest62019
24/08/2007, 12h36
ca sert à multiplier à mettre le paramètre au carré ?
enfin bon c'est surement pas ça......
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'ailleurs ça sert plus à grand chose avec les plateformes x86 modernes, je pense!
A moi de poser une question!
Comment tester rapidement si un entier non signé est une puissance de 2?
(Langage au choix)
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'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, 13h20
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'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'arriver des bricoles à parler comme ça ^_^ j'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'avoir une petite expliquation propédeutique ???
:huh:
Mon gars, il va t'arriver des bricoles à parler comme ça ^_^ j'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'avoir une petite expliquation propédeutique ???
Toutes les expliquations ici (http://www.games-creators.org/wiki/Racine_carr%C3%A9_de_John_Carmack)
Sinon pour les noob dans mon genre ya moyen (Pen² ou Tramb) d'avoir une petite expliquation propédeutique ???
En fait c'est l'application d'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'il fait apparaître un nombre magique (le 0xbidule) qui a l'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'est là que ça rend le code beaucoup plus imbitable et un peu plus rapide, et c'est plutôt malin! :w00t:
Comment tester rapidement si un entier non signé est une puissance de 2?
(Langage au choix)
Rapidement je sais pas mais je pense qu'on peut jouer avec les décalages :
int verif(uint num) {
while(num && !(num&1))
num = num >> 1;
return !num;
}
Il a même été écrit par quelqu'un que nous respectons tous :lol:
Ah parce que tu respectes carmack toi ? :mellow:
Ah parce que tu respectes carmack toi ? :mellow:
à fond, c'est mon idole!
j'ai même des posters de lui dans ma chambre
à fond, c'est mon idole!
j'ai même des posters de lui dans ma chambre
Oh la mega lose. :ninja:
et tu manges des céréales "crousti-carmack" au ptit dej' ?
et je suis allé spécialement en Allemagne pour trouver un coiffeur capable de me faire sa coifure.
Rapidement je sais pas mais je pense qu'on peut jouer avec les décalages :
int verif(uint num) {
while(num && !(num&1))
num = num >> 1;
return !num;
}
Y'a une solution sans boucle! Sauras-tu la trouver? :)
Je précise qu'on ne gère pas le cas avec la valeur d'entrée 0.
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'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'est sans que le processeur fasse de branchement. En C ça doit revenir à se débrouiller avec la valeur de retour d'une comparaison...
http://i0005.photobucket.com/albums/0005/icanhascheezburger/2007/6/12/1/128261114448593750lolcatalignr.jpg
HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
Rapidement je sais pas mais je pense qu'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'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'à ce que le lsb soit égal à 1, et verif() retourne 0.
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.
Je ne fais pas de programmation, mais à tout hasard je propose Martian Gothic.
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'ordinateur a au moins un Pentium 2 on peut utiliser le jeu d'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'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'autre moyen de trouver la valeur absolue.
Je ne comprends pas ton code, il marche ? D'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'à ce que le lsb soit égal à 1, et verif() retourne 0.
Non il ne marche pas (du tout ;p) mais c'était pour expliquer un peu mieux ma pensée (qui était en gros : utiliser une boucle et des décalages).
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.
Je n'ai pas été assez explicite, je parlais d'éviter les branchements. CMP fait juste une soustraction sans sauvegarder le résultat et positionne les flags de statut. Voilà un exemple qui n'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'équivalent en C :
int a, b, max;
max = (-(a > b) & (a-b)) + b;
Tu relances ?
Bon les setcc à la place des branchements c'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'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.
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.
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'était un peu évident que je parlais de ne pas faire de branchement pour que le programme ne suive qu'un chemin quoi qu'il arrive. Pour le (a > b), ça dépend de ce que le compilateur en fait.
Si tu as une meilleure solution je suis preneur.
Bah meilleure solution, non, c'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'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!
Ben je comptais sortir ça (http://www.linux-kheops.com/doc/ansi-c/node29.htm#SECTION003210000000000000000) mais je n'arrive pas à le compiler, et j'ai pas trop envie d'essayer de comprendre non plus. :wacko:
Alors une connue : comment interchanger deux valeurs sans passer par une variable intermédiaire ?
Alors une connue : comment interchanger deux valeurs sans passer par une variable intermédiaire ?
Bon je réponds pas sur celle là, quelqu'un doit bien connaître ça dans le coin!
Ghost Line
28/08/2007, 22h56
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 ^^
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, 05h22
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'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 ;)
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;
}
}
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'ai beau relire ce truc, j'en ai aucune idée :blink:
C’est un truc de matheux.
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'arrive pas à capter ce que ça fait.
Un p'tit indice? :siffle:
Si n est premier, ça renvoie n-1.
Exact.
Tu connais beaucoup de fonctions qui renvoient n−1 si n est premier ?
J'arrive pas à capter ce que ça fait.
Un p'tit indice? :siffle:
Et si n est composé du produit de deux nombres premiers ? Ou alors d’une puissance d’un seul nombre premier ?
putain les gars arretez tout quoi :ninja:
quand je vois ce topic, je me dis que finalement non :happy2:
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'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'air d'être l'indicateur d'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'arithmétique est pas ma compétence la plus forte en maths <_< )
C’est ça.
Ça s’appelle l’indicatrice d’Euler, et c’est noté ϕ(n).
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 : ط بقناة العربية يقدم على مدار الساعة ال)
(Cool on peut copier des caractères chelous sur le forum : ط بقناة العربية يقدم على مدار الساعة ال)
Ce qui veut dire ?
que tu ne comprend pas les caracteres chelous :smile:
que tu ne comprend pas les caracteres chelous :smile:
...et que j'ai copié du texte de google sans savoir ce que c'était.
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.
Et qui relance dans tout ça ? :happy2:
Je peux vous trouver une autre fonction mathématique, si vous voulez.
Phatcobra
29/08/2007, 18h27
à fond, c'est mon idole!
j'ai même des posters de lui dans ma chambre
C'est à cause de gars comme toi (les geeks) que les filles ont "peur" des mecs comme moi (les gamers)
Je propose d'écrire un algorithme qui arrondit un nombre à un multiple d'une puissance de 2 donnée.
Edit : le mien arrondit seulement dessus (normal c'est prévu pour aligner l'adresse d'une zone mémoire), si quelqu'un trouve mieux...
Toxic, je t'adore !!! et faut vraiment que je teste ce jeu dont tu parles tout le temps
C'est à cause de gars comme toi (les geeks) que les filles ont "peur" des mecs comme moi (les gamers)
Un gamer, c'est pas un geek qui en plus ne connait rien à l'informatique?
Phatcobra
29/08/2007, 18h51
Un gamer, c'est pas un geek qui en plus ne connait rien à l'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'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'on peut interpréter par « joueur inconditionnel », désigne un joueur qui s'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'obtenir de meilleurs scores seul ou en équipe, souvent contre d'autres joueurs ou d'autres équipes et explore un jeu entièrement pour en dénicher ses subtilités. Le hardcore gamer s'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 ;)
C'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, 18h55
et yen a qui ont du mal à comprendre le second degré :mellow:
oulala !! mais c'est du 3eme ça :rolleyes:
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;
tu vois la nuance ???
Je suis pas un boutonneux premier de la classe ;)
Oui, je cerne bien la nuance!
En fait un gamer c'est un boutonneux, mais dernier de la classe! :happy2:
Phatcobra
29/08/2007, 18h59
Oui, je cerne bien la nuance!
En fait un gamer c'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 ('tention, tink veille) mais qui cachent sa passion des jeux vidéos car ça plait pô aux bimbos B)
j'arrete de pourrir votre topic ou je ne scorerai jamais :cry:
non, un premier de la classe, cool, dans le vent, avec des filles magnifiques aux appats généreux ('tention, tink veille) mais qui cachent sa passion des jeux vidéos car ça plait pô aux bimbos B)
j'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, 19h03
(je pense au jeu, à la programmation, et au fistfucking).
:wub:
viens mardi au fucking blue boys, je suis Blackmanba :rolleyes:
:wub:
viens mardi au fucking blue boys, je suis Blackmanba :rolleyes:
C'est toi le 7ème en partant de la gauche au mur de bites?
Phatcobra
29/08/2007, 19h05
C'est toi le 7ème en partant de la gauche au mur de bites?
non, lui c'est petit orvet .
Moi, c'est le quatrieme en partant de la gauche, celle avec des pustules, de l'herpes et des champignons de paris :siffle:
Zongo = la fonction d'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))))))
Ouais, cette fois c’était un classique.
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);
}
A quoi ça sert de chercher à comprendre des trucs aussi crades ? :blink:
Si tu veux, je te trouve du code en BrainFuck, hein.
Si tu veux, je te trouve du code en BrainFuck, hein.
excellent le BrainFuck, je connaissais pas. Le ook a l'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'est un Hello World parait-il.
Bon sinon mon code n'était pas totalement inutile, c'est un générateur de nombres pseudo aléatoire de Von Neumann.
bill_baroud
30/08/2007, 14h47
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
}
j'adore le smiley en plein milieu :smile:
Sans division ? Ben tu reprogrammes l’algorithme de la division, à savoir une soustraction répétée. :ph34r:
Ghost Line
30/08/2007, 20h50
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'est uniquement vrai pour 3. Et je vous merde :)
si
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'ai trouver l'utilité de la fonction du premier post !!!
Cela sert a calculer une racine carré non ?
C'est une extension du topic du kamoulox, c'est ca?
J'ai trouvé l'utilité de la fonction du premier post !!!
Cela sert a calculer une racine carré non ?
Oui, mais tu arrives après la guerre.
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;
}
Ça calcule le nombre de 1 dans la décomposition en base 2 ?
XWolverine
04/09/2007, 22h52
Encore un truc porno qui compte les bits :happy2:
Edit : Oups, Ducon, comme tu causes bien :ninja:
Celui qui veut peut relancer. :siffle:
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, 22h59
Je t'en prie, Ducon, je suis trop vieux pour ces conneries :happy2:
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:
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)
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. ;)
Et même en le compilant, il fallait deviner.
Ouais mais ça a plus grand'chose à voir avec la programmation du coup. :| Pour le fonctionnement c'est simple, elle calcule le nombre de bits dans chaque doublet puis chaque quadruplet, chaque octet, etc.
J'ai pas d'idée pour la suite , je chercherai demain. :zzz:
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. Tous droits réservés