rekenen, worteltrekken
7 berichten
• Pagina 1 van 1
- pierrepasmans
- Berichten: 10
- Geregistreerd: 12 Nov 2016, 15:27
rekenen, worteltrekken
Ik probeer met de arduino te rekenen, en dat lukt redelijk. ik zoek echter een voorbeeld van een programmatje om te worteltrekken.
ik denk dat ik #include <math.h> moet gebruiken, en dat het gaat over sqrt.
mijn einddoel is om zelf een schets te schrijven waarmee ik priemgetallen kan zoeken.
ik denk dat ik #include <math.h> moet gebruiken, en dat het gaat over sqrt.
mijn einddoel is om zelf een schets te schrijven waarmee ik priemgetallen kan zoeken.
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: rekenen, worteltrekken
pierrepasmans schreef:Ik probeer met de arduino te rekenen, en dat lukt redelijk. ik zoek echter een voorbeeld van een programmatje om te worteltrekken.
ik denk dat ik #include <math.h> moet gebruiken, en dat het gaat over sqrt.
mijn einddoel is om zelf een schets te schrijven waarmee ik priemgetallen kan zoeken.
Wat houd je tegen om het gewoon te proberen?
Re: rekenen, worteltrekken
Er zijn (te) veel algoritmes voor priemgetallen. De ene nog meer geoptimaliseerd dan de andere. Probeer er maar eentje, en kijk of het werkt.
Tegenwoordig heeft de Arduino omgeving bijna alles al geinclude, dus die #include <math.h> heb je misschien niet nodig.
De tweede sketch heeft hier ook worteltrekken als optimalisatie: http://www.gammon.com.au/forum/?id=12168&page=999
Tegenwoordig heeft de Arduino omgeving bijna alles al geinclude, dus die #include <math.h> heb je misschien niet nodig.
De tweede sketch heeft hier ook worteltrekken als optimalisatie: http://www.gammon.com.au/forum/?id=12168&page=999
- pierrepasmans
- Berichten: 10
- Geregistreerd: 12 Nov 2016, 15:27
Re: rekenen, worteltrekken
beste Nico, ik ga zeker gewoon proberen, maar wist de syntax van het worteltrekken niet. bedankt voor de aanmoediging. Pierre
Re: rekenen, worteltrekken
priemetallen zijn altijd hele getallen, je kunt dus wel een eind komen, maar als je een beetje verder komt dan zul je toch met een array of een string gebruiken.
denk eraan dat een rekenmachine ook maar een bepaalde precisie heeft.
je zult bijvoorbeeld een array van 100 cijfers nodig hebben.
denk eraan dat een rekenmachine ook maar een bepaalde precisie heeft.
je zult bijvoorbeeld een array van 100 cijfers nodig hebben.
paul deelen
shooter@home.nl
shooter@home.nl
Re: rekenen, worteltrekken
Dit is de bovenste sketch met gewone getallen (zonder de leds) van die link naar Nick Gammon.
Hij heeft daar ook een sketch staan met BigNum.
Dit is dus met 32-bit long. Ik dacht dat zelfs de Arduino Uno 64-bits integers aan kan.
Op dit moment heb ik een Arduino Uno en een Arduino M0 aan mijn computer hangen met elk een serial monitor. De Arduino M0 met 48 MHz heeft een drie keer snellere cpu klok, maar hij loopt meer dan drie keer sneller omdat de sketch met 32-bit long werkt en de ARM M0+ 32-bit is.
Mijn Arduino Uno zegt dat 1613609 een priemgetal is en mijn Arduino M0 zegt dat 6651661 een priemgetal is.
Hij heeft daar ook een sketch staan met BigNum.
Dit is dus met 32-bit long. Ik dacht dat zelfs de Arduino Uno 64-bits integers aan kan.
- Code: Alles selecteren
// Find prime numbers.
// Taken from the first sketch at this page:
// http://www.gammon.com.au/forum/?id=12168&page=999
// Removed the led outputs.
// With Arduino 1.8.1 and Arduino Uno and Arduino M0
//
// Set baudrate of serial monitor to 115200 !
// The SerialUSB is the serial port via the usb communication of a Arduino M0, Leonardo, Yun, and so on.
#define SERIAL Serial
// #define SERIAL SerialUSB
// A 'long' is signed 4 bytes for Arduino Uno and Arduino Zero and Arduino M0.
long candidate;
long found = 5; // Number we found
unsigned long start;
void setup()
{
SERIAL.begin(115200);
while (!SERIAL); // for ATmega32U4 (Leonardo/Micro)
SERIAL.println();
SERIAL.println("Prime numbers (starts at 11)");
}
void loop()
{
for (candidate = 3; candidate < 99999999; candidate += 2)
{
showIfPrime (candidate);
}
}
void showIfPrime (long num)
{
// we are already skipping odd numbers, now skip if divisible by 3
if (num % 3 == 0)
return;
// Only have to check for divisible for the sqrt(number)
long upper = sqrt(num) + 6;
// Check if the number is divisible (start at 6 going up)
for (long cnum = 6; cnum <= upper; cnum += 6)
{
if (num % (cnum - 1) == 0)
return;
if (num % (cnum + 1) == 0)
return;
} // end of checking cnum-1, cnum+1
SERIAL.print(candidate);
SERIAL.print(" is prime, took ");
SERIAL.print(millis () - start);
SERIAL.print (" ms, found ");
SERIAL.print (found);
SERIAL.println (" primes");
start = millis ();
found++;
}
Op dit moment heb ik een Arduino Uno en een Arduino M0 aan mijn computer hangen met elk een serial monitor. De Arduino M0 met 48 MHz heeft een drie keer snellere cpu klok, maar hij loopt meer dan drie keer sneller omdat de sketch met 32-bit long werkt en de ARM M0+ 32-bit is.
Mijn Arduino Uno zegt dat 1613609 een priemgetal is en mijn Arduino M0 zegt dat 6651661 een priemgetal is.
Re: rekenen, worteltrekken
er kan verschil zijn in de getallen, zeker als ze erg hoog worden door het aantal bits in accumulator
paul deelen
shooter@home.nl
shooter@home.nl
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten