Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten
https://fgheysels.github.io/
Verwijderd
Moest een beetje aan haskell denken toen ik dit zag..oisyn schreef op maandag 18 januari 2010 @ 17:54:
[...]
De oplossing in m'n Kol Q l8or 2 is trouwens
code:
1 apply(i:1..100,r:0,r+i)**2 - apply(i:1..100,r:0,r+i**2)
Toen ook maar even aan de slag gegaan..
1
| sum([1..100])^2 - sum([i^2 | i <- [1..100]]) |
Was ik net weer blij toen project Euler weer up was en ik ga druk bezig met het oplossen van proleem 55. Denk ik een antwoord te hebben gevonden, vul het in... Gaat hij weer down
edit: lijkt nu weer up te zijn. Ach nou ja, had het toch fout
[ Voor 14% gewijzigd door fiftyhillswest op 18-01-2010 20:29 ]
Ik heb JS-code die een flinke bult werk in één keer moet doen (ja, heeft te maken met m'n eerdere berichten). Tussentijds wil ik delen van de informatie displayen, en dat gaat uiteraard niet want 99% van de browsers renderen pas na het executen van een function(). Gewoonlijk is hiervoor de oplossing om de desbetreffende function() op te hakken en er tussendoor de browser te laten renderen. Hier is dit niet mogelijk.
Ik heb gekeken naar Gears WorkerPool om threads van mijn probleem te maken, maar dit werkt ook niet omdat ik alleen maar strings naar een mede-worker kan passen, en ik moet persé een object passen (DOM-object en/of Blob).
Ik ken geen andere manier. Iemand een idee/tip?
Ja, open er een topic overIk ken geen andere manier. Iemand een idee/tip?
hint hint!
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Minder haakjes plz:Verwijderd schreef op maandag 18 januari 2010 @ 20:17:
[...]
Moest een beetje aan haskell denken toen ik dit zag.![]()
Toen ook maar even aan de slag gegaan..
code:
1 sum([1..100])^2 - sum([i^2 | i <- [1..100]])
1
| sum [1..100] ^ 2 - sum [n*n | n <- [1..100]] |
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Jij bent creepy...Creepy schreef op maandag 18 januari 2010 @ 20:58:
[...]
Ja, open er een topic over![]()
offtopic:
hint hint!
ok, ok, eerst even m'n code toonbaar maken
Verwijderd
Ziet er inderdaad iets meer haskell style uit.RayNbow schreef op maandag 18 januari 2010 @ 21:09:
[...]
Minder haakjes plz:
Haskell:
1 sum [1..100] ^ 2 - sum [n*n | n <- [1..100]]
Of fold idd, maar dat komt omdat ie is ontstaan uit een apply-achtige constructie en z'n leven in z'n huidige vorm sowieso onzeker is, dus ik heb gewoon nog niet de moeite genomen om de naam te veranderenpedorus schreef op maandag 18 januari 2010 @ 20:10:
Ik denk hetzelfde als:
S:
1 sum(1:100)^2-sum((1:100)^2)
Die apply-functie: Is reduce geen betere naam?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Althans, zo leek het. * Sebazzz aait .NET reflector
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Je zou natuurlijk ook kunnen branchen. Dan kan je blijven committen zonder dat de trunk wordt aangepast. Als het dan af is kan je de branch weer mergen.Sebazzz schreef op maandag 18 januari 2010 @ 22:29:
AuwKlasgenoot commit een rewrite van een algoritme dat we in ons spel gebruiken, Subversion kan hem niet mergen dus hij zou voor 'Use my file' moeten kiezen, kiest ie per ongeluk voor iets anders (blijkbaar). 7 uur werk weg.
Althans, zo leek het. * Sebazzz aait .NET reflector
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Mag ik mee aaien? Wel nog eerst even een schop geven tegen zijn lazy load ass...
Wij onderbreken deze thread voor reclame:
http://kalders.be
Nee, je gaat pas mergen nadat je hebt gecommit naar je branch. Als je je branch merget met een 'accept theirs' dan is je merge weliswaar niet goed gegaan, maar je branch is er nog, inclusief je laatste changes. Dit itt een commit van een stuk code waarbij je merget met een 'accept theirs', omdat de uiteindelijke file dus de versie wordt zoals ie in het depot staat, en je changes dus weg zijn (lokale (in-memory) backups daargelaten)Voutloos schreef op maandag 18 januari 2010 @ 23:31:
Dan nog heb je gewoon de vorige revisie hoor...
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Maar goed, een beetje IDE heeft daar lokale revisies voor. Lees: Eclipse heeft me er ook eens bij kunnen helpen.

{signature}
Maarja, ben nieuw bij Subversion.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Probeer ik via phpmyadmin in te loggen op de mysql-server (username en wachtwoord) krijg ik de volgende melding:
[red]#1045 - Access denied for user 'root'@'localhost' (using password: NO) [/red]
Alle configuratiebestanden nogmaals doorlopen, services herstart, mocht allemaal niet baten.
Pak ik Firefox erbij, meteen succesvol inloggen
Chrome stuurt kennelijk het wachtwoord-veld niet goed door kwam ik achter met de debugger. Beetje vreemd en niet zo lekker
If money talks then I'm a mime
If time is money then I'm out of time
Ha, ik dacht 'die doen we even', maar toen bleek dat de string representatie van een groot nummer in PHP ineens 5.nogwatE+nogwat is,afraca schreef op maandag 18 januari 2010 @ 17:56:
Ik blijf maar worstelen met probleem 13 van project euler. (hier). Je krijgt honderd 50-digit getallen, prima. Maar als ik 'm in 1 string zet, vervolgens str_split met tweede argument 50, zie ik in m'n var_dump niet netjes een array met 100 getallen, maar 105 volgens mij.... En m'n editor geeft aan bij het selecteren dat ik 5099 characters selecteer.....
Verwijderd
Als de getallen echt te groot zijn voor PHP dan heeft Java hetzelfde probleem; je zal een grote getallen bibliotheek nodig gaan hebben ben ik bang.Voor PHP is dat bcmath dacht ik, Java heeft BigInteger (zit in standaard math package).
[ Voor 40% gewijzigd door Verwijderd op 19-01-2010 10:38 ]
Dat is gewoon de default representatie? Met sprintf et al. kun je zelf een representatie kiezenYopY schreef op dinsdag 19 januari 2010 @ 09:47:
[...]
Ha, ik dacht 'die doen we even', maar toen bleek dat de string representatie van een groot nummer in PHP ineens 5.nogwatE+nogwat is,. Bah, rofl. Dan maar in Java doen?
edit: en met hierboven, PHP integers worden floats boven ~2^31
[ Voor 7% gewijzigd door user109731 op 19-01-2010 10:42 ]
Hint:Verwijderd schreef op dinsdag 19 januari 2010 @ 10:37:
je zal een grote getallen bibliotheek nodig gaan hebben ben ik bang.
[ Voor 3% gewijzigd door cfern op 19-01-2010 10:51 ]
"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE
Verwijderd
Ik heb geen flauw idee waar die precies mee bezig is. Maar als hij denkt van PHP -> Java te moeten overstappen omdat ze getallen te groot worden dan gaat die overstap niet echt werken.
int carry = 0;
for (i=0; i<len; ++i) { // index 0 is lsd
int sum = (int)(a[i]) + (int)(b[i]) + carry;
carry = sum / 10;
result.push_back(sum%10);
}
if (carry) result.push_back(carry);
Je kan ook 50 digits in een keer optellen in een innerloop.
[ Voor 12% gewijzigd door Zoijar op 19-01-2010 11:15 ]
Output in SVG leek me een goede optie, maar ik kan nergens een goede gratis tool vinden die SVG omzet in XAML; alleen het betaalde ReaderSVG werkt goed (evaluation version geprobeerd), maar aangezien het een hobbyproject is wil ik er eigenlijk geen geld aan spenderen.
Output in PLAIN en weergeven met het DotViewer control voldeed ook niet aan mijn wensen, omdat het control niet goed overweg kan met kleuren en het uitlezen en wijzigen van data van nodes is zeer beperkt. Dit is wel open source, dus dit zou ik zelf kunnen uitbreiden, alleen wil ik me liever richten op de functionaliteit van het tooltje zelf.
Iemand hier bij de koffieautomaat die een goede tip heeft?
We are shaping the future
(mogelijk naief) idee: SVG is XML. Xaml is XML. Gebruik een XSLT om beiden in elkaar over te knutselen.Amras schreef op dinsdag 19 januari 2010 @ 11:29:
Iemand hier bij de koffieautomaat die een goede tip heeft?
Misschien dat deze link een aanknopingspuntje biedt? http://www.xs4all.nl/~wrb/Articles/Article_SVGToXAML_01.htm
"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE
Nouja, de enige reden dat ik naar Java overstap is omdat ik weet hoe BigInteger werkt, voor bcmath moet ik het eerst uitzoeken,Verwijderd schreef op dinsdag 19 januari 2010 @ 10:37:
@hierboven
Als de getallen echt te groot zijn voor PHP dan heeft Java hetzelfde probleem; je zal een grote getallen bibliotheek nodig gaan hebben ben ik bang.Voor PHP is dat bcmath dacht ik, Java heeft BigInteger (zit in standaard math package).
(Jaja, ik weet dat dat het doel van Euler best wel overbodig maakt, maar ik zeg maar altijd, een goeie programmeur is lui.)
En ik had wel zoiets geraden dat je niet alle cijfers bij elkaar op hoeft te tellen om die eerste 10 cijfers van het resultata te vinden, maar ik ben niet wiskundig genoeg aangelegd (lees: ik ken dat truukje niet, en ben te lui om het uit te zoeken) om die manier toe te passen.
Toch maar eens thuis met Euler bezig ipv op het werk,
Bekend verschijnsel.YopY schreef op dinsdag 19 januari 2010 @ 11:46:
Toch maar eens thuis met Euler bezig ipv op het werk,.
'Gelukkig' ben ik nu op het punt aanbeland dat eventjes een probleempje tussendoor oplossen op het werk echt niet meer kan. Ik ben al blij als ik er 1 per week haal nu. Dus in plaats van mijn werktijd te verprutsen met project Euler, verpruts ik nu mijn werktijd met praten over project Euler.
Gelukkig is alle verstookte tijd niet voor niets geweest. Ik heb zo ontzettend veel opgestoken van functioneel programmeren, algoritmes en datastructuren dat dat indirect mijn werk toch ten goede komt. Nu nog de baas overtuigen van dit verhaal.
"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE
Klopt, alle benodigde digits passen gewoon in een 64 bits float of int. Het is alleen wel jammer dat de input wat dat betreft niet heel nauw luistert. Met te weinig digits krijg je hetzelfde antwoord.cfern schreef op dinsdag 19 januari 2010 @ 10:48:
[...]
Hint:spoiler:je hebt niet alle cijfers van de inputgetallen nodig. Je kunt het probleem zonder bigint library oplossen.
1
2
3
4
5
6
| $input = /* de array van getallen als strings */; $result = 0; foreach($input as $value) $result += (float)substr($value, 0, 13); $result = substr(sprintf("%10.0f", $result), 0, 10); echo $result; |
[ Voor 19% gewijzigd door .oisyn op 19-01-2010 12:26 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Welnee man, gewoon basisschoolniveau wiskundeskills (en middelbare-schoolniveau PHP skillsVerwijderd schreef op dinsdag 19 januari 2010 @ 10:37:
@hierboven
Als de getallen echt te groot zijn voor PHP dan heeft Java hetzelfde probleem; je zal een grote getallen bibliotheek nodig gaan hebben ben ik bang.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <?php $data = <<<EOF 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 .. 20849603980134001723930671666823555245252804609722 53503534226472524250874054075591789781264330331690 EOF; $data = explode("\n", $data); $result = ''; for ($col = 49; $col >= 0; --$col) { foreach ($data as $row) $sum += $row[$col]; $result = ($sum%10).$result; $sum = intval($sum/10); } echo substr($sum.$result, 0, 10); |
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dank voor jullie reactie. Ik ga toch even onderzoeken hoeveel werk het echt is om de gegenereerde SVG files naar een knap stuk XAML te transformeren. Als het meevalt, ga ik toch maar die kant op.cfern schreef op dinsdag 19 januari 2010 @ 11:37:
[...]
(mogelijk naief) idee: SVG is XML. Xaml is XML. Gebruik een XSLT om beiden in elkaar over te knutselen.
Misschien dat deze link een aanknopingspuntje biedt? http://www.xs4all.nl/~wrb/Articles/Article_SVGToXAML_01.htm
Verwijderd
Ik weet dat het niet moeilijk is om add/sub/mul/div te doen voor grotere getallen; maar waarom zou ik zelf een functie schrijven als die er al is?Soultaker schreef op dinsdag 19 januari 2010 @ 12:21:
[...]
Welnee man, gewoon basisschoolniveau wiskundeskills (en middelbare-schoolniveau PHP skills):
...
@hieronder: die dingen heb je lang niet altijd nodig (zeker niet voor 50 decimalen). Mul kan zonder al te veel gedoe ook nog wel in O(n*m), waar n en m grote zijn van getal 1 en 2. Een simpele geimplementeerde div kan ook nog wel redelijk snel. En je hebt gelijk; als je moeilijk gaat doen kan het sneller (maar datis lang niet altijd de moeite waard).
[ Voor 32% gewijzigd door Verwijderd op 19-01-2010 23:36 ]
mul en div zijn best lastig om efficient te doen; heb je toch FFTs en Newton inversions nodig etc.Verwijderd schreef op dinsdag 19 januari 2010 @ 19:40:
Ik weet dat het niet moeilijk is om add/sub/mul/div te doen voor grotere getallen;
Ik kreeg nooit for / foreach loops op de basisschool, laat staan cijfers met 50 nummers,Soultaker schreef op dinsdag 19 januari 2010 @ 12:21:
[...]
Welnee man, gewoon basisschoolniveau wiskundeskills (en middelbare-schoolniveau PHP skills):
Verwijderd
1
2
3
4
| problem13 = do inpStr <- readFile "problem13.txt" print (take 10 (show (sumFile inpStr))) where sumFile = sum . map read . words |
/me is even helemaal in z'n sas met haskell
Precies hetzelfde, maar minder haakjes:Verwijderd schreef op dinsdag 19 januari 2010 @ 20:40:
Toch leuk zo'n lazy taal als haskell.
code:
1 2 3 4 problem13 = do inpStr <- readFile "problem13.txt" print (take 10 (show (sumFile inpStr))) where sumFile = sum . map read . words
/me is even helemaal in z'n sas met haskell
1
2
| problem13 = print . take 10 . show . sum . map read . words =<< readFile "problem13.txt" |
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Verwijderd
RayNbow schreef op maandag 18 januari 2010 @ 21:09:
[...]
Minder haakjes plz:
Haskell:
1 sum [1..100] ^ 2 - sum [n*n | n <- [1..100]]
1
2
| cumsum(binomcdf(99,0 sum(ans)[sup]2[/sup]-sum(ans[sup]2[/sup] |
14 bytes
heb nu 6 opgelost met mn GR, maar de rest schiet niet op... (lees: te weinig mem, 10000x pi berekenen?

Is dat voor de euler challenge?Verwijderd schreef op dinsdag 19 januari 2010 @ 20:40:
Toch leuk zo'n lazy taal als haskell.
code:
1 2 3 4 problem13 = do inpStr <- readFile "problem13.txt" print (take 10 (show (sumFile inpStr))) where sumFile = sum . map read . words
/me is even helemaal in z'n sas met haskell
Nou ja, ik doe Project Euler problemen voor m'n eigen plezier, en om mezelf een beetje uit te dagen. Als het enige doel de oplossing vinden is, kun je natuurlijk een kant-en-klare library gebruiken, maar persoonlijk beleef ik er meer lol aan als ik ook zelf een essentieel stukje oplossingsalgoritme bedenk en implementeer. Alleen de I/O doen en de rest door een library laten afhandelen vind ik niets. Maar ieder z'n meug.Verwijderd schreef op dinsdag 19 januari 2010 @ 19:40:
Ik weet dat het niet moeilijk is om add/sub/mul/div te doen voor grotere getallen; maar waarom zou ik zelf een functie schrijven als die er al is?
Er zijn zelfs sites die alle eindantwoorden publiceren, zodat mensen heel snel een 100% score kunnen behalen zonder de problemen maar te hoeven lezen. Wat daar het praktisch nut van is ontgaat me echt volledig.

Je hebt op de basisschool toch wel geleerd hoe je twee (of meer) getallen optelt met pen en papier? Die zet je onder elkaar, en dan tel je de cijfers in de eerste kolom op. Het laatste cijfer van die som is het laatste cijfer van het antwoord, en de rest neem je mee bij het optellen van de volgende kolom, enzovoorts.YopY schreef op dinsdag 19 januari 2010 @ 20:18:
Ik kreeg nooit for / foreach loops op de basisschool, laat staan cijfers met 50 nummers,.
Dat is precies wat mijn voorbeeldcode doet, en als je de basisschoolmethode kent, maakt het weinig uit of je nu twee of 100 getallen optelt, en of die getallen uit drie of 50 cijfers bestaan. Het principe blijft hetzelfde en voor die for-loops heb je die middelbare-schoolniveau* PHP-kennis die ik noemde.
Ik denk dat ik de gevraagde som ook wel met pen en papier had kunnen uitrekenen toen ik twaalf was. Maar het had me uiteraard wat tijd gekost.
* Ja, ik weet dat PHP niet onderwezen wordt op de middelbare school, maar menig middelbare scholier heeft enige kennis van webdesign en -programmering met PHP.
[ Voor 3% gewijzigd door Soultaker op 19-01-2010 23:47 ]
* Sebazzz zit dus in de verkeerde informatica klasSoultaker schreef op dinsdag 19 januari 2010 @ 23:42:
[...]
* Ja, ik weet dat PHP niet onderwezen wordt op de middelbare school, maar menig middelbare scholier heeft enige kennis van webdesign en -programmering met PHP.
De meeste bij ons hebben enige kennis van Steam, CoD4 enzovoorts
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Verwijderd
Verwijderd
oefening: een lib maken die kan delen en vermenigvuldigen, je lib mag enkel + en - gebruikenSoultaker schreef op dinsdag 19 januari 2010 @ 23:42:
Je hebt op de basisschool toch wel geleerd hoe je twee (of meer) getallen optelt met pen en papier? Die zet je onder elkaar, en dan tel je de cijfers in de eerste kolom op. Het laatste cijfer van die som is het laatste cijfer van het antwoord, en de rest neem je mee bij het optellen van de volgende kolom, enzovoorts.
ja, dat is mij gelukt met assemblier, maar niet makkelijk... de Z80 heeft dus geen multiplicatie instructie

tip: je kan vermenigvuldigen met 2
Nee hoor, hoogstens HTML met frames. En Logo, en GameMaker maar voor de rest heb ik vorig jaar niets echt dynamisch gehad. Maarja, ik koos ook informatica om me tijd te verdoen dat laatste examenjaar. Goed geluk hoorVerwijderd schreef op dinsdag 19 januari 2010 @ 23:55:
Je komt php op middelbaar wel tegen hoor (past prima in het vak Informatica als keuzevak tweede fase). Ervaring is wel dat er maar enkelen per klas for gaan snappen en dergelijke.

[ Voor 10% gewijzigd door Sebazzz op 20-01-2010 00:08 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Verwijderd
[ Voor 9% gewijzigd door Verwijderd op 20-01-2010 00:24 ]
Klinkt bekend.Verwijderd schreef op dinsdag 19 januari 2010 @ 23:59:
oefening: een lib maken die kan delen en vermenigvuldigen, je lib mag enkel + en - gebruiken
Maar is inderdaad leuk om over dat soort dingen na te denken.
edit:
Wellicht moet ik dat iets toelichten: je kunt vergelijkbare algoritmen toepassen voor vermenigvuldigen/delen met alleen optellen/aftrekken als voor het implementeren van die operaties voor willekeurig grote getallen, omdat je registers simpelweg kunt zien als arrays van bits, en dan is een operaties op arrays van bits simpelweg een operatie in basis 2.
[ Voor 34% gewijzigd door Soultaker op 20-01-2010 00:33 ]
Zoiets wel, maar dan andersom - begin bij de laatste getallen, tel die bij elkaar op, en doe de overflow (of hoe dat maar heettequote: SoultakerJe hebt op de basisschool toch wel geleerd hoe je twee (of meer) getallen optelt met pen en papier? Die zet je onder elkaar, en dan tel je de cijfers in de eerste kolom op. Het laatste cijfer van die som is het laatste cijfer van het antwoord, en de rest neem je mee bij het optellen van de volgende kolom, enzovoorts.
Herkenbaar, maar wij hebben op de middelbare school nog wel een half jaartje Delphi gedaan.Sebazzz schreef op woensdag 20 januari 2010 @ 00:08:
Nee hoor, hoogstens HTML met frames. En Logo, en GameMaker maar voor de rest heb ik vorig jaar niets echt dynamisch gehad. Maarja, ik koos ook informatica om me tijd te verdoen dat laatste examenjaar. Goed geluk hoor
Wat een drama was dat

If money talks then I'm a mime
If time is money then I'm out of time

Sole survivor of the Chicxulub asteroid impact.
Verwijderd
exactSoultaker schreef op woensdag 20 januari 2010 @ 00:29:
edit:
Wellicht moet ik dat iets toelichten: je kunt vergelijkbare algoritmen toepassen voor vermenigvuldigen/delen met alleen optellen/aftrekken als voor het implementeren van die operaties voor willekeurig grote getallen, omdat je registers simpelweg kunt zien als arrays van bits, en dan is een operaties op arrays van bits simpelweg een operatie in basis 2.
het word pad moeilijk als je wortel probeert te implementeren, ben er nog niet uit hoe je dat efficiënt doet.
zo dus:

al snap ik daar geen bal van..
En ik zie een gekke E, dat betekent de som van iets. Volgens mij,
ik HAAT wiskunde
Dat is ook precies wat er gebeurt (for loopje telt van 49 naar 0)YopY schreef op woensdag 20 januari 2010 @ 09:20:
[...]
Zoiets wel, maar dan andersom - begin bij de laatste getallen, tel die bij elkaar op, en doe de overflow (of hoe dat maar heette) naar het getal links daarvan.
Ikzelf heb vroeger ook nog wel eens staartdelingen lopen implementeren in basic op de msx zodra ik het op school gehad had. Waren wel leuke expirimentjes. Het meest suffe was eigenlijk dat ik vooral liep te kloten met het afdrukken ipv het berekenen.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Verwijderd
Gosh, die E (sigma) kun je best wel zien als een doodgewoon for-loopje.YopY schreef op woensdag 20 januari 2010 @ 09:53:
En ik zie een gekke E, dat betekent de som van iets. Volgens mij,.
N=0 tot oneindig in het geval van deze E.
Dus zoiets:
1
2
3
4
| for(int n = 0; n => 0; n++) { // blijft wel even runnen :+ } |
[ Voor 22% gewijzigd door Verwijderd op 20-01-2010 10:21 ]
Het lijkt me dan wel een goed idee om een conditie op te nemen om uit de loop te breken (of gebruik een while loop) Ik heb verder ook geen zin om m'n hoofd te breken over die formuleVerwijderd schreef op woensdag 20 januari 2010 @ 10:17:
[...]
Gosh, die E (sigma) kun je best wel zien als een doodgewoon for-loopje.
N=0 tot oneindig in het geval van deze E.
Dus zoiets:
C:
1 2 3 4 for(int n = 0; n => 0; n++) { // blijft wel even runnen :+ }
Dus zoiets:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ellips = 0,000000000000001; keepOnGoing = true; n = 0; result = 0; while (keepOngoing) { tempValue = berekenFormule(n); result += tempValue; if (tempValue > ellips) { n++; } else keepOnGoing = false; } |
Kater? Eerst water, de rest komt later
Verwijderd
Hmm, dat doet mijn huidige docent Cisco ook. Althans, degene die het hoorcollege geeft. Hij heeft gewoon van de Cisco courses een screenshot gemaakt en in zijn ppt geplakt en hij weet het toch onduidelijk te brengen. Van de Cisco courses zelf leer ik meer dan van hem. Die man is zo saai, en brengt het zo saai dat je je aandacht er echt niet bij kan houden.AtleX schreef op woensdag 20 januari 2010 @ 09:41:
Ach, ik had Pascal op het mbo. De leraar stond het gewoon uit een boekje voor te lezen.
De praktijkdocent is gewoon een bromsnor die niks zegt en af en toe even bromt.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Ik ben nog bezig (althans, een vriend van me heeft het overgenomen) om uit te zoeken wat de meest efficiente wortel-benadering is in V8 (Chrome).Verwijderd schreef op woensdag 20 januari 2010 @ 09:43:
[...]
exact![]()
het word pad moeilijk als je wortel probeert te implementeren, ben er nog niet uit hoe je dat efficiënt doet.
zo dus:
[afbeelding]
al snap ik daar geen bal van..
[ Voor 12% gewijzigd door mux op 21-01-2010 16:31 ]
Ik heb in mijn eigen arbitrary-precision arithmetic library sqrt(s) geïmplementeerd middels e0.5∙ln sVerwijderd schreef op woensdag 20 januari 2010 @ 09:43:
[...]
exact![]()
het word pad moeilijk als je wortel probeert te implementeren, ben er nog niet uit hoe je dat efficiënt doet.
zo dus:
[afbeelding]
al snap ik daar geen bal van..
[ Voor 56% gewijzigd door .oisyn op 20-01-2010 11:35 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
Het gaat echt als een zonnetje
En het is niet een heel grote applicatie (< 10000 loc), dus het is lekker overzichtelijk.
Heerlijk
[ Voor 5% gewijzigd door Verwijderd op 21-01-2010 10:48 ]
Als LOC een maatstaf zou zijn voor inzichtelijkheid dan kan ik je redenatie volgen, maar nu niet. De gemiddelde programmeur is echt niet binnen 1 uur thuis in een applicatie van 10000 LOC hoor. Ik heb hier een libje van, zonder commentaar, 2219 regels en daar zit toch best wat nifty spul in waardoor het toch best wel complex wordt.Verwijderd schreef op donderdag 21 januari 2010 @ 10:47:
En het is niet een heel grote applicatie (< 10000 loc), dus het is lekker overzichtelijk.
Sole survivor of the Chicxulub asteroid impact.
Lazy loading op class niveau schakel ik altijd uit. Geen dynamic proxies dan, maar ik kan er niet tegen als ik al mijn properties virtual moet maken, als dat semantisch niet nodig is in mijn domain model.GrimaceODespair schreef op maandag 18 januari 2010 @ 23:35:
[...]
Mag ik mee aaien? Wel nog eerst even een schop geven tegen zijn lazy load ass...
https://fgheysels.github.io/
Verwijderd
Nee, dat is uiteraard niet dé maatstaaf voor overzichtelijkheid, maar het was slechts een indicatie voor de grootte. De 'dus' was verkeerd inderdaad. Het is verder een redelijk eenvoudige winform app, zonder spiffy spul. Er staat ook vrij veel commentaar in. Dus een fijn projectje om mee te stoeien zal ik maar zeggen
[ Voor 27% gewijzigd door Verwijderd op 21-01-2010 10:59 ]
Math.sqrt is echt relatief langzaam. In chrome althans. Ik heb niet veel precisie nodig dus ik probeer te kijken hoeveel sneller het te krijgen is met minder precisie. Vandaar..oisyn schreef op woensdag 20 januari 2010 @ 11:27:
Waarom zou je daarvoor een efficiente wortel-benadering implementeren? De overhead van de expressie van de benadering is waarschijnlijk groter dan simpelweg Math.sqrt() die native geïmplementeerd is.
Nou, een redelijk eenvoudige winforms app is geen 10000 loc tenzij je een paar gigantische designer.cs files hebt. Ter vergelijking, mijn 2-maandelijkse rapport van de trunk van TPP2 laat deze filetree zien en sloccount gaf op 1 december 2009 in totaal 6811 regels code in .cs files aan. Sloccount negeert commentaar, tel ik dat mee dan kom ik op 6975 regels. Ik weet dus niet wat jij onder redelijk eenvoudig verstaat, maar als je eerst zegt dat vrijwel alle code in een form zit en er 'maar' 10000 regels code zijn dan kan ik het niet eens zijn met je opmerking dat dat het 'redelijk eenvoudig' is.Verwijderd schreef op donderdag 21 januari 2010 @ 10:57:
[...]
Nee, dat is uiteraard niet dé maatstaaf voor overzichtelijkheid, maar het was slechts een indicatie voor de grootte. De 'dus' was verkeerd inderdaad. Het is verder een redelijk eenvoudige winform app, zonder spiffy spul. Er staat ook vrij veel commentaar in. Dus een fijn projectje om mee te stoeien zal ik maar zeggen
[ Voor 3% gewijzigd door AtleX op 21-01-2010 11:35 ]
Sole survivor of the Chicxulub asteroid impact.
namespace AtleX.SwissArmyKnifeAtleX schreef op donderdag 21 januari 2010 @ 11:34:
[...]
Ter vergelijking, mijn 2-maandelijkse rapport van de trunk van TPP2 laat deze filetree zien en sloccount gaf op 1 december 2009 in totaal 6811 regels code in .cs files aan.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Sole survivor of the Chicxulub asteroid impact.
Verwijderd
Pfff idd wat suf zeg! Net even getest, en Math.sqrt() is idd tergend langzaam. Ik vraag me af waarom dat is. Net even een testje gedaan met Newton's method.ssj3gohan schreef op donderdag 21 januari 2010 @ 11:15:
[...]
Math.sqrt is echt relatief langzaam. In chrome althans. Ik heb niet veel precisie nodig dus ik probeer te kijken hoeveel sneller het te krijgen is met minder precisie. Vandaar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| function time() { return new Date().getTime(); } function fastsqrt(x) { if (x <= 0) return 0; var r = x * 0.5; for (var i = 0; i < 12; i++) r = 0.5 * (r + x/r); return r; } var NUM = 100000; var t = time(); var sum1 = 0; for (var i = 0; i < NUM; i++) sum1 += Math.sqrt(i); var t1 = time() - t; t = time(); var sum2 = 0; for (var i = 0; i < NUM; i++) sum2 += fastsqrt(i); var t2 = time() - t; alert (t1 + ", " + t2 + ", error: " + (sum2 - sum1)); |
fastsqrt() is hier vrijwel 2x zo snel als Math.sqrt(), en geeft een error van 0. Als je genoegen neemt met minder preciese kun je het aantal iteraties in de for-loop verlagen.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Gisteren ook gedaan, maar omdat de hoster een paar parameters verkeerd instelde (?) ging de test niet op volle sterkte. Toch nog 40.000 stemmen in een 20 minuutjes (inclusief pauze tussen tests, dus reken eens 10) verwerkt, waar normaalgesproken zoveel in een maand verwacht worden bij normaal gebruik.
Tests van vanmiddag (verwacht): 50 threads die 5000 requests (2 requests, 1 submit) uitvoeren met een interval van 200 tot 400 ms, Totaal 90.000 stemmen, 180.000 requests, en hopelijk geen problemen.
...En dan hetzelfde doen op de live server, ipv de test zoals nu
Heb ik al eens gezegd dat je een held bent?
Trek dat maar weer in. Als je gewoon Math.sqrt (de functie dus) opslaat in een lokale var dan is de code ook 2x zo snel. Het is de access op het Math object dat het traag maakt.ssj3gohan schreef op donderdag 21 januari 2010 @ 12:22:
[...]
Heb ik al eens gezegd dat je een held bent?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Wikipedia: Fast inverse square root
maar dat gaat niet werken in javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| function time() { return new Date().getTime(); } function fastsqrt(x) { if (x <= 0) return 0; var r = x * 0.5; for (var i = 0; i < 12; i++) r = 0.5 * (r + x/r); return r; } var NUM = 100000; var Mathsqrt = Math.sqrt; var t = time(); var sum1 = 0; for (var i = 0; i < NUM; i++) sum1 += Math.sqrt(i); var t1 = time() - t; t = time(); var sum2 = 0; for (var i = 0; i < NUM; i++) sum2 += Mathsqrt(i); var t2 = time() - t; t = time(); var sum3 = 0; for (var i = 0; i < NUM; i++) sum3 += fastsqrt(i); var t3 = time() - t; document.write("Math.sqrt(): " + t1 + "ms, Mathsqrt(): " + t2 + "ms, fastsqrt(): " + t3 + "ms, error on fastsqrt() vs Math.sqrt(): " + (sum3 - sum1)); |
Dit geeft bij mij:
quote: IE 8.0.6001.18702Math.sqrt(): 172ms, Mathsqrt(): 125ms, fastsqrt(): 734ms, error on fastsqrt() vs Math.sqrt(): 0
quote: Firefox 3.5.7Math.sqrt(): 4ms, Mathsqrt(): 4ms, fastsqrt(): 38ms, error on fastsqrt() vs Math.sqrt(): 0
Wat doe ik dan verkeerd?quote: Chrome 3.0.195.38Math.sqrt(): 24ms, Mathsqrt(): 12ms, fastsqrt(): 71ms, error on fastsqrt() vs Math.sqrt(): 0
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Leuk om te zien dat Firefox ruim sneller is als Chrome, terwijl ze altijd zo lopen op te scheppen over hun snelle javascript engine [/rant]CodeCaster schreef op donderdag 21 januari 2010 @ 13:37:
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 function time() { return new Date().getTime(); } function fastsqrt(x) { if (x <= 0) return 0; var r = x * 0.5; for (var i = 0; i < 12; i++) r = 0.5 * (r + x/r); return r; } var NUM = 100000; var Mathsqrt = Math.sqrt; var t = time(); var sum1 = 0; for (var i = 0; i < NUM; i++) sum1 += Math.sqrt(i); var t1 = time() - t; t = time(); var sum2 = 0; for (var i = 0; i < NUM; i++) sum2 += Mathsqrt(i); var t2 = time() - t; t = time(); var sum3 = 0; for (var i = 0; i < NUM; i++) sum3 += fastsqrt(i); var t3 = time() - t; document.write("Math.sqrt(): " + t1 + "ms, Mathsqrt(): " + t2 + "ms, fastsqrt(): " + t3 + "ms, error on fastsqrt() vs Math.sqrt(): " + (sum3 - sum1));
Dit geeft bij mij:
[...]
[...]
[...]
Wat doe ik dan verkeerd?
En tsja, Chrome is misschien langzamer met Math.sqrt(), maar het start nog steeds tien keer sneller op en het rendert ook zowaar sneller.
Het inlinen van de code zorgt trouwens ook nog best voor een flinke verbetering.
JaH, maar wie gebruikt dan ook math.sqrt() in JS behalve als je een nerd bent die een 3D engine daarin doet? [/troll]roy-t schreef op donderdag 21 januari 2010 @ 13:39:
[...]
Leuk om te zien dat Firefox ruim sneller is als Chrome, terwijl ze altijd zo lopen op te scheppen over hun snelle javascript engine [/rant]
(Lees ook als: Javascript is niet bedoeld voor 3D graphics. Of, nog niet,
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
[ Voor 41% gewijzigd door .oisyn op 21-01-2010 15:12 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
maar goed, ik zal wel weer iets over het hoofd zien.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Waarom zou je alleen maar normaliseren voor vergelijkingenJanoz schreef op donderdag 21 januari 2010 @ 15:38:
Ja, normalizeren van vectoren inderdaad, maar veel berekeningen kun je ook omzeilen door hetgeen je vergelijkt gewoon te kwadrateren
En in de realiteit werk je niet met een letterlijk kwadratische afname maar met een attenuation curve, waarvoor je de afstand gewoon nodig hebt.De afname van licht is in principe niet lineair, sterker nog, die is kwadratisch dus eigenlijk hoef je de wortel niet eens te trekken.
In ieder geval is het nogal kort door de bocht om te stellen dat je geen sqrt nodig zou hebben in een 3d engine.
[ Voor 8% gewijzigd door .oisyn op 21-01-2010 15:43 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
1
2
3
4
5
6
7
8
| float InvSqrt (float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759df - (i>>1); x = *(float*)&i; return x*(1.5f - xhalf*x*x); } |
Over geschiedenis gesproken, Euler 5.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $number = 0; while (true) { $number++; if ($number % 1000000 == 0) { echo '.'; } for ($i = 2; $i <= 20; $i++) { if ($number % $i != 0) { continue 2; } } break; } echo $number; |
Doet er wel even over,
Men ontdekt priemgetallen - in bovenstaande loop hoef je 4, 6, 8, 9, 10, 12, 14, 15, 16 en 18 niet te controleren, omdat die al deelbaar zijn door lagere getallen (2, 3, etc).
Mja, toen liep ik wat vast (dwz een mooie manier om de exponenten te vinden), dus de rest gecopypastad. Ik begin volgens mij log te snappen, maar praktisch kan ik het nog niet toepassen. Nieuwe, honderd miljoen miljard maal snellere oplossing:
1
2
3
4
5
6
7
| $primes = array(2, 3, 5, 7, 11, 13, 17, 19); $product = 1; foreach ($primes as $prime) { $product *= pow($prime, intval(log(20) / log($prime))); } echo $product; |
euh. 2 tot de macht (10^x = 20, vul x in) delen door (10^x = 2), afronden, maal het bestaande product, rinse repeat voor alle priemgetallen tm 20. Het deel gedeelte (log(20) / log($prime)) kan ik me nog niet helemaal goed voor de geest krijgen.
Ik haat wiskunde.
Dat is een logaritme met grondgetal $prime in plaats van e. Kun je in PHP overigens ook opschrijven als log(20, $prime);YopY schreef op donderdag 21 januari 2010 @ 15:47:
Het deel gedeelte (log(20) / log($prime)) kan ik me nog niet helemaal goed voor de geest krijgen.
Ik haat wiskunde.
[ Voor 9% gewijzigd door PrisonerOfPain op 21-01-2010 15:52 ]
xlog y = zlog y / zlog x (dit volgt uit bovenstaande regel en (ab)c = ab*c)
In PHP is log(x) eigenlijk elog x oftewel ln x. e = ~2.71828
[ Voor 19% gewijzigd door .oisyn op 21-01-2010 16:15 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Zie je wel dat je een held bent..oisyn schreef op donderdag 21 januari 2010 @ 15:12:
Normalizeren van vectoren, distance attenuation van lights.
Ik ben niet alleen met 3D bezig, dat heb ik in 2005 oid al met SVG gemaakt (een rubik's cube in SVG, whaddayathinkofthat), dit keer moeten er textures enzo in.
Verwijderd
pfft, mijn grafische rekenmachine (6 mhz, 0.8 MIPS ofzo...) had hem zonder LCD( LCM( te gebruiken in minder dan een secondeYopY schreef op donderdag 21 januari 2010 @ 15:47:
Over geschiedenis gesproken, Euler 5.
ook geen primes gebruikt
think again
Je leest verkeerd. het is meer "Je hebt het inderdaad voor normaliseren nodig" en vervolgens "in andere omstandigheden kun je vaak ook toe met het kwadrateren van hetgeen waarmee je vergelijkt.oisyn schreef op donderdag 21 januari 2010 @ 15:41:
Waarom zou je alleen maar normaliseren voor vergelijkingenLight vectors moet je bijv. normaliseren voor de dot product met de normal.
Je zou de curve kunnen kwadrateren, maar goed, aangezien jij er meer in zit neem ik gelijk aan dat via de wortel toch echt efficiënter isEn in de realiteit werk je niet met een letterlijk kwadratische afname maar met een attenuation curve, waarvoor je de afstand gewoon nodig hebt.
Eensch. Wat ik echter veel zie is dat er niet even doorgerekend wordt bij wat formules. Voor jou geldt dat natuurlijk niet. Vandaar de kort door de bocht stelling (waarbij ik hoopte dat iemand anders er op zou reagerenIn ieder geval is het nogal kort door de bocht om te stellen dat je geen sqrt nodig zou hebben in een 3d engine.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Vroegâh, met de fixed function pipeline, had je al de formule ax2 + bx + c voor de attenuation, met x de afstand tot het licht, en a, b en c kon je zelf instellen. Tegenwoordig gebruikt men meestal een texture (een simpele LUT dus). Een kwadratische lookup in de LUT is niet zo handig, dan zit de resolutie niet waar je 'm nodig hebt.Janoz schreef op donderdag 21 januari 2010 @ 16:05:
Je zou de curve kunnen kwadrateren, maar goed, aangezien jij er meer in zit neem ik gelijk aan dat via de wortel toch echt efficiënter is.
Klopt. Vaak wordt er ook veel teveel genormaliseerd, terwijl als je doorrekent je idd vaak kan delen door de kwadratische lengte ipv de lengte zelf, die natuurlijk veel goedkoper is om uit te rekenen.Eensch. Wat ik echter veel zie is dat er niet even doorgerekend wordt bij wat formules.
[ Voor 4% gewijzigd door .oisyn op 21-01-2010 16:12 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Sole survivor of the Chicxulub asteroid impact.
Am I fucked?
Going for adventure, lots of sun and a convertible! | GMT-8
En je denkt dat ik dat begrijp?.oisyn schreef op donderdag 21 januari 2010 @ 15:57:
xy=z <=> x=z1/y <=> y=xlog z
xlog y = zlog y / zlog x (dit volgt uit bovenstaande regel en (ab)c = ab*c)
In PHP is log(x) eigenlijk elog x oftewel ln x. e = ~2.71828
Pff, je speelt vals, imhoVerwijderd schreef op donderdag 21 januari 2010 @ 15:59:
[...]
pfft, mijn grafische rekenmachine (6 mhz, 0.8 MIPS ofzo...) had hem zonder LCD( LCM( te gebruiken in minder dan een seconde
ook geen primes gebruikt
think again
De echter hardcore doet het in Befunge, en de echte hardcore in Malbolge. De laatste categorie zijn overigens geen mensen.
Verwijderd
YopY schreef op donderdag 21 januari 2010 @ 16:52:
Pff, je speelt vals, imho. Een oplossing in J (volgens mij) was vijf karakters lang. Anderen gebruikten zoiets als lcm(range(0, 20)) in wiskundige programmeertalen.
1
2
3
4
5
6
7
8
9
| 1->C for(a,1,20 0 repeat not(fpart(ans/A ans+C end ans->C end disp C |
zoiets was het
fpart( pakt het fraction gedeelte uit een getal
asm?De echter hardcore doet het in Befunge, en de echte hardcore in Malbolge. De laatste categorie zijn overigens geen mensen.
[ Voor 13% gewijzigd door Verwijderd op 21-01-2010 17:12 ]
Zo hoog had ik je idd wel ingeschat ja, sorry dat mijn mensenkennis me in de steek laat
Maar zelfs jij snapt toch dat als je a*b=c hebt, en je weet b en c en je wilt a weten, dat je dan c/b moet doen? Oftewel, a*b=c <=> a=b/c
Zo ook bij machtsverheffen. Als je xy = z hebt, en je hebt z en x maar je wilt y berekenen (immers, z is die 20 en x is je deler, en je wilt weten met welke macht je x moet verheffen om 20 te krijgen), dan moet je y = xlog z doen.
Dat is feitelijk wat log(20) / log($prime) doet. Nou heeft PHP's log functie wel een extra parameter waarmee je de basis ($prime dus) kunt opgeven, maar als je dat niet hebt en je hebt puur een log() functie die met een vaste basis werkt (meestal e of 10), dan zul je iets meer werk moeten doen.
Goed, je wilt dus y = xlog 20 berekenen, maar je log functie werkt alleen met basis 10. log 20 geeft een waarde p waarbij 10p = 20, maar je wilt het weten voor xy = 20. En daar komt de regel van pas die zegt dat (ab)c = ab*c. a is hier 10, en 10b is x. Oftewel, b = log x, dus x = 10log x. Nu je x kunt uitdrukken in een macht van 10 kun je y uitrekenen. Je wilde weten wanneer xy = 20, en x was 10log x, dus dat wordt (10log x)y = 20. Haakjes wegwerken geeft 10(log x * y) = 20, dus y wordt log 20 / log x.
Maar goed, dat is het onderliggende bewijs, handiger is om gewoon aan te leren dat als ergens staat log(x) / log(y) dat er dan bedoelt wordt ylog x, ongeacht het grondtal van de betreffende log() functie
[ Voor 76% gewijzigd door .oisyn op 21-01-2010 17:52 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dit topic is gesloten.
Dit topic is niet de plaats om te lopen helpdesken. De Coffee Corner is primair bedoeld als uitlaatklep, niet als vraagbaak