abonnement Unibet Coolblue Bitvavo
pi_115489831
quote:
0s.gif Op zondag 12 augustus 2012 15:31 schreef t4rt4rus het volgende:
w00t OP is al een stuk beter, goed gedaan GS42!

Ik kijk later zelf wel even wat we kunnen toevoegen.
Ha, dank je. Natuurlijk was het ook niet overdreven moeilijk om verbeteringen aan te brengen. ;) Leuk als jullie ook iets toevoegen, het is nog lang niet compleet.

quote:
0s.gif Op zondag 12 augustus 2012 17:01 schreef thenxero het volgende:

PE 13 eindelijk opgelost. Vreemd genoeg duurde het 1sec om één Unlimited Int te lezen en te printen, dus ik had niet veel vertrouwen in de snelheid. Maar die 50 getallen bij elkaar optellen ging ook in ongeveer 1 sec, dus dat viel wel mee :)
Daar kan je best gelijk in hebben. Ik moest kiezen tussen snelle in- en output of snel rekenen. Hier heb ik dus voor gekozen. :) Compileren met -O2 of -O3 helpt wel flink.

quote:
0s.gif Op zondag 12 augustus 2012 17:04 schreef t4rt4rus het volgende:
Met GMP duurt het 0.003s om op te lossen.
Ik heb ook geen schijn van kans tegen GMP. :'( Op een korte benchmark die ik gedaan heb, was GMP zo 50 keer sneller op puur rekenwerk en ik ben bang dat dat oploopt naarmate de getallen groter worden. Op de in- en output wil ik niet eens weten hoe veel sneller ze zijn. :) Maar sneller zijn dan GMP was gelukkig ook niet mijn doel.

quote:
0s.gif Op zondag 12 augustus 2012 19:03 schreef thenxero het volgende:

Na wat gegoogle begrijp ik dat je ze moet sorteren op grootte, maar dat haal ik niet echt uit de vraag
Als je dat in C++ wilt doen, gaat dat trouwens heel mooi met std::next_permuation. Die produceert permutaties in oplopende volgorde. Opgave 24 kan je zo in 3 (korte) regels code doen.

quote:
0s.gif Op zondag 12 augustus 2012 21:23 schreef thenxero het volgende:
Precies. Heb nu ook met de class van GS42 opgave 20 opgelost. In 0.2 seconde dus ik vind die klasse erg goed werken.
Blij dat het nu goed werkt. Dit is precies het soort doel dat ik voor ogen had: grote getallen en gebruiksgemak waar geen extreme snelheid nodig is. Dank je wel voor het testen. :)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115495012
quote:
0s.gif Op zondag 12 augustus 2012 23:40 schreef GS42 het volgende:
Blij dat het nu goed werkt. Dit is precies het soort doel dat ik voor ogen had: grote getallen en gebruiksgemak waar geen extreme snelheid nodig is. Dank je wel voor het testen. :)
Ja, erg bedankt voor deze gebruiksvriendelijke class :) .

Ik vrees dat ik een bug heb gevonden. Ik probeer het eerste Fibonacci getal te vinden die uit minstens 1000 cijfers bestaat. Dat betekent dat het getal groter dan of gelijk aan 10^999 is. Dus ik ga getallen vergelijken met 10000.........000 (999 nullen). Ik krijg geen error maar ook geen output (alleen return 0).
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
pi_115495799
C++ kan natuurlijk geen getallen zoals 100000000....0000 parsen.
pi_115495839
lol dat gaat ook niet werken xero :P
Misschien in een string zetten?
pi_115496000
Hierboven staat zowel de oorzaak als de oplossing. :) C++ kan niet zulke grote getallen verwerken (vandaar de problemen om met grote getallen te rekenen) en daarom moeten zulke getallen in string-vorm aangeleverd worden.

1Unlimited::Int k("10000000");

Initialiseert k vanuit een string.

Trouwens: je zou ook een compiler-waarschuwing moeten krijgen als je jouw code probeert te compileren. Iets als "integer constant too large for its type" ofzo. Een compiler-waarschuwing is vrijwel altijd een waarschuwing dat er iets niet helemaal klopt in de code en moet dus weggewerkt worden.

[ Bericht 14% gewijzigd door GS42 op 13-08-2012 00:51:07 ]
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115498545
quote:
0s.gif Op maandag 13 augustus 2012 00:45 schreef GS42 het volgende:
Hierboven staat zowel de oorzaak als de oplossing. :) C++ kan niet zulke grote getallen verwerken (vandaar de problemen om met grote getallen te rekenen) en daarom moeten zulke getallen in string-vorm aangeleverd worden.
[ code verwijderd ]

Initialiseert k vanuit een string.

Trouwens: je zou ook een compiler-waarschuwing moeten krijgen als je jouw code probeert te compileren. Iets als "integer constant too large for its type" ofzo. Een compiler-waarschuwing is vrijwel altijd een waarschuwing dat er iets niet helemaal klopt in de code en moet dus weggewerkt worden.
Ik krijg vreemd genoeg geen compiler waarschuwing. Als naïeve newb dacht ik dat je bij Unlimited::int een ongelimiteerde integer kon initialiseren. Bedankt!
pi_115500455
tvp voor ProjectEuler. Ik heb de eerste 26 al :7 /opschepmodus
pi_115500675
quote:
2s.gif Op maandag 13 augustus 2012 02:44 schreef kutkloon7 het volgende:
tvp voor ProjectEuler. Ik heb de eerste 26 al :7 /opschepmodus
Morgen Vandaag ben ik hopelijk ook zo ver.

Misschien moeten we maar een apart PE draadje maken(?)
pi_115505531
Een goed idee. Ik ben ook begonnen met PE, maar dan met Python 3.
Some people should be around your entire life; others should just make an appearance.
pi_115506035
quote:
0s.gif Op maandag 13 augustus 2012 01:27 schreef thenxero het volgende:

[..]

Ik krijg vreemd genoeg geen compiler waarschuwing. Als naïeve newb dacht ik dat je bij Unlimited::int een ongelimiteerde integer kon initialiseren. Bedankt!
Gebruik `-Wall -Wextra'.
Ik compile het meeste met `-O3 -std=c++11 -Wall -Wextra'

[ Bericht 5% gewijzigd door t4rt4rus op 13-08-2012 11:48:31 ]
pi_115506413
Al het gepraat over Project Euler kan nu hier, dan blijft het wel zo overzichtelijk en kunnen andere talen ook meedoen.
pi_115507274
quote:
0s.gif Op maandag 13 augustus 2012 01:27 schreef thenxero het volgende:

Als naïeve newb dacht ik dat je bij Unlimited::int een ongelimiteerde integer kon initialiseren. Bedankt!
Opzich geen rare gedachte. :) Goede tip, ik zal het wel ergens in de documentatie opnemen.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115509169
quote:
0s.gif Op maandag 13 augustus 2012 12:20 schreef GS42 het volgende:

[..]

Opzich geen rare gedachte. :) Goede tip, ik zal het wel ergens in de documentatie opnemen.
Ik heb het trouwens opgelost door het te initialiseren als een klein getal, en dan met een loop steeds keer 10 doen totdat je genoeg nullen hebt. Dat werkt wel gewoon.
pi_115509352
quote:
0s.gif Op maandag 13 augustus 2012 13:19 schreef thenxero het volgende:

Ik heb het trouwens opgelost door het te initialiseren als een klein getal, en dan met een loop steeds keer 10 doen totdat je genoeg nullen hebt. Dat werkt wel gewoon.
Ook een prima oplossing natuurlijk. Iets als Int x(10); x.pow(999); geeft je ook het juiste getal.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115606314
quote:
7s.gif Op maandag 13 augustus 2012 03:00 schreef thenxero het volgende:

[..]

Morgen Vandaag ben ik hopelijk ook zo ver.

Misschien moeten we maar een apart PE draadje maken(?)
Goed idee, ik zie dat je dat inmiddels al gedaan hebt ;)
pi_115656114
Is er een handige manier om twee waardes om te wisselen in C++ zonder dat je een derde variable aanmaakt? Bijvoorbeeld: Stel dat a=1, en b=2. Dan wil ik dat a=2 en b=1. Nu zou ik dat doen met zoiets als:

1
2
3
4
5
6
7
int a,b,c;
a=1;
b=2;

c=b;
b=a;
a=c;
Maar dan heb je dus extra geheugen nodig voor die c, en ik vroeg me dus af of dat ook beter kan.
pi_115656279
1
2
3
b = a+b
a = b-a
b = b-a
pi_115656673
Natuurlijk, ik zat eigenlijk te denken aan bepaalde libraries :')
pi_115657822
std::swap, maar soms heb je geen andere keus (maar dat regelt std::swap dus achter de schermen).

edit: voor primitive datatypes gaat dit niets uitmaken, het is vooral handig met types die ook pointers naar andere objecten bevatten. Een kleine optimisatie is je c in die code als const te declareren, dan houdt hij em zeker in CPU registers. Of de berekening met meer flops uitvoeren zoals thabit doet als je echt geen plek hebt.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115658292
Dit soort truuks lijken me niet hetgene om wakker van te liggen overigens. Vaak zitten ze al in std geoptimaliseerd, en anders wordt je code er alleen maar onleesbaarder van.
pi_115658786
Mwah, dat van const is mijns inziens toch erg handig zoveel mogelijk goed te doen, in alle situaties.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115659665
quote:
0s.gif Op donderdag 16 augustus 2012 21:43 schreef thabit het volgende:
Dit soort truuks lijken me niet hetgene om wakker van te liggen overigens. Vaak zitten ze al in std geoptimaliseerd, en anders wordt je code er alleen maar onleesbaarder van.
Die truc die jij postte of die const?

Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
pi_115660118
quote:
0s.gif Op donderdag 16 augustus 2012 22:09 schreef thenxero het volgende:

[..]

Die truc die jij postte of die const?

Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
Ik doelde op de truc die ik zelf postte; const is wel goed om aan te leren.

Goed random getallen produceren, dat is een vakgebied op zich. Ik zou vooral googlen naar wat mensen ermee gedaan hebben.
pi_115665657
quote:
0s.gif Op donderdag 16 augustus 2012 22:09 schreef thenxero het volgende:

[..]

Die truc die jij postte of die const?

Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
/dev/random ...
pi_115665784
quote:
0s.gif Op donderdag 16 augustus 2012 20:54 schreef thenxero het volgende:
Is er een handige manier om twee waardes om te wisselen in C++ zonder dat je een derde variable aanmaakt? Bijvoorbeeld: Stel dat a=1, en b=2. Dan wil ik dat a=2 en b=1. Nu zou ik dat doen met zoiets als:
[ code verwijderd ]

Maar dan heb je dus extra geheugen nodig voor die c, en ik vroeg me dus af of dat ook beter kan.
xchg rax, rbx :)
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')