Avatar billede geek Nybegynder
19. februar 2003 - 01:28 Der er 9 kommentarer og
2 løsninger

Oversættelse fra c

hi
jeg har fået fat i en c funktion jeg godt kunne bruge i delphi, og da jeg ikke forstår det hele håbede jeg en af jer kunne forklare mig det...
Er funktionen :
function Noise1(integer x, integer y)
    n = x + y * 57
    n = (n<<13) ^ n;
    return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);   
  end function
som driller en smule.
Eller rettere er "(n<<13)" og "7fffffff" jeg ikke ved hvad gør
håber en af jer kan hjælpe.

Geek
[Hint] life.pas(8): Variable 'Happiness' is declared but never used in 'Meaning_of_life'
Avatar billede tam Nybegynder
19. februar 2003 - 01:42 #1
Jeg er C koder, så jeg kan ikke hjælpe dig med pascal-delen, men jeg kan da sige hvad det par ting betyder...

<< er Left shift (<<), dvs. at man flytter alle bits en plads til venstre.
I pascal er ^vist en pointer, i C er det en Bitwise exclusive OR
& er en Bitwise AND

7fffffff burde de have skrevet 0x7fffffff for at være helt korrekt. Det er Hex for 2147483647

Håber det kan hjælpe dig lidt...
Avatar billede tam Nybegynder
19. februar 2003 - 02:09 #2
Oops, n << 13 betyder at man flytter alle bits i n 13 pladser til venstre...
Avatar billede tam Nybegynder
19. februar 2003 - 02:13 #3
Hmmm, såvidt jeg husker fra gamle dage hvor jeg kodede lidt pascal, så er
10 / 3 = 3,3333....
og
10 div 3 = 3

I C++ er
10 / 3 = 3 hvis det ene eller bagge tallene er integers. Hvis begge er float (decimaltal) så er
10 / 3 = 3,333333

Det kan gøre en stor forskel ;)
Avatar billede geek Nybegynder
19. februar 2003 - 02:31 #4
hvis det er real i c børe man så ikke skrive 10.0 / 3.0 = 3,33333 ??

dvs n er enten lig med n * 10^-13 eller bare n ?????
Er der en speciel grund til at det er skrevet i hex ?? (eller er det kun lavet for at forvirre mig ?? :))

Hvordan skal "(n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff" forståes ??
return (n*(n^2*tal1+tal2)+tal3) og tal4;
Hvordan kan return være n gange en masse tal samtidig med den er tal4 ??
(Måske bare mig der burde smutte i seng :))
Avatar billede borrisholt Novice
19. februar 2003 - 08:24 #5
Der er et par forskellige muligheder .. Du glemmer at fortælle om retur typen og den slags ..

Men her er i hverfald et bud :

uses
  Math;
function Noise1(x, y  : Integer) : Extended;
var
  n : Integer;
begin
  n := x + y * 57;
  n := Trunc(Power((n shl 13) , n));
  result :=  ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) and $7fffffff) / 1073741824.0);
end;

Jens B

God is real unless declared integer !
Avatar billede doc404 Novice
19. februar 2003 - 10:26 #6
borrisholt....

^ er ikke potensopløftning i C... Det er en xor

n := Trunc((n shl 13) xor n)
Avatar billede borrisholt Novice
19. februar 2003 - 10:29 #7
Nååe ja ... Det er rigtige :-)

(Pinligt)

Jens B
Avatar billede doc404 Novice
19. februar 2003 - 10:52 #8
lad nu ikke sådanne detaljer spolerer din dag ;-)
Avatar billede geek Nybegynder
19. februar 2003 - 18:54 #9
Hov det må i undskylde, troede jeg havde fået skrevet på hvor funktionen kom fra. :) Stammer fra siden :
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
Og er bare Pseudo code. Så derfor jeg havde glemt retur type.
Men tusindtak for hjælpen alle 3
Avatar billede geek Nybegynder
19. februar 2003 - 19:04 #10
Doc : Håber ikke du bære nag over du ikke fik tildelt et par point, men du havde ikke svaret, og jeg kom frem til at de få point nok ikke betød det helt store i livets store sammenhæng...
Men jeg tager fejl og det betyder du vil gi' mig et spark i røven, når man står og banker på himlens port (hvis du da kommer først) skal jeg nok finde en måde at gøre det godt igen!!

Geek
[Hint] life.pas(8): Variable 'Happiness' is declared but never used in 'Meaning_of_life'
Avatar billede geek Nybegynder
19. februar 2003 - 19:19 #11
Skulle lige være et "Hvis" inde imellem "men" og "Jeg" i 4. linje for at det giver en smule mening
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester