Hoe sla ik een getal op met veel cijfers achter de komma?

Arduino specifieke Software
Berichten: 11
Geregistreerd: 23 Dec 2016, 14:35

Hoe sla ik een getal op met veel cijfers achter de komma?

Berichtdoor maxgrin » 23 Dec 2016, 14:41

Hoi,
Ik ben redelijk nieuw op dit forum dus ik hoop maar dat dit de goede plek is om mijn vraag te stellen.

Ik ben bezig met een eigen mini robotje te maken. Maar nu loop ik tegen een probleempje aan. Ik moet het getal 4.1666666667 opslaan. Heb al van alles geprobeert float, char, int etc. Maar als ik het print op de Serial Monitor krijg ik de heletijd 4 of 4.00. Weet iemand hoe ik dit getal wel op kan slaan?

Met vriendelijke groet,
Max.

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor Koepel » 23 Dec 2016, 15:26

Dat is een floating point getal, dus bijvoorbeeld op de Arduino Uno kun je dan een 'float' gebruiken.
Hoe nauwkeurig wil je dat getal ? Welk Arduino board gebruik je ?

De Arduino Uno heeft geen 64-bits floating point getallen, alleen maar 32-bit en dat is niet zo veel.

De Serial.println() drukt maar twee cijfers achter de komma af. Je kunt een getal geven voor het aantal cijfers achter de komma. Het staat hier: https://www.arduino.cc/en/Serial/Println. Ze hebben het over: "number of decimal places".

Probeer dit eens op een Arduino Uno. Je zult zien dat ongeveer 6 cijfers achter de komma nog correct zijn, de rest niet meer omdat het slechts 32-bit is:
Code: Alles selecteren
void setup ()
{
  Serial.begin(9600);

  float grin = 4.1666666667;
  Serial.println( grin, 0);
  Serial.println( grin, 8);
  Serial.println( grin, 40);
}

void loop ()
{
}

Berichten: 11
Geregistreerd: 23 Dec 2016, 14:35

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor maxgrin » 23 Dec 2016, 15:39

Ik gebruik een Arduino Mega. En het moet precies zijn anders krijg ik van die nare afwijkingen

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor Koepel » 23 Dec 2016, 15:47

De Arduino Mega 2560 hoort bij dezelfde familie als de Arduino Uno. Ze gebruiken 8-bit microcontrollers, en de floating point is slechts 32-bit :(

Meestal is dat echter geen probleem. Misschien dat je de berekening met tussenvariabelen eens na kunt kijken.

Wanneer je de stappen wilt bijhouden van een stepper motor (stappenmotor), dan is een floating point getal daar niet geschikt voor. Dan wordt meestal een long integer gebruikt.

Waar is het voor ?

Wil je echt 4.16666666667 opslaan, of wil je 25/6 opslaan ?

Berichten: 11
Geregistreerd: 23 Dec 2016, 14:35

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor maxgrin » 23 Dec 2016, 16:03

Nee.
Ik zal uitleggen wat ik aan het doen ben.
Ik ben dus een mini robot je aan het maken heb net gemeten hoelang hij erover doet om 180 graden te draaien. 750 / 180 = 4.16..7.
Mocht ik het korter maken dan krijg je van die kleine afwijkingen. Weet u desnoods een manier om het te compenseren?
Ik gebruik DC motors.

Berichten: 11
Geregistreerd: 23 Dec 2016, 14:35

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor maxgrin » 23 Dec 2016, 16:06

Of ik moet het getal afronden. Maar geen idee hoe dat moet.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor Koepel » 23 Dec 2016, 16:16

Dan valt het ruim binnen de nauwkeurigheid van een 32-bit 'float'. Dus die kun je gerust gebruiken.
Zodra je iets meet in de echte wereld, dan zit daar al meer onnauwkeurigheid in dan in de 32-bit 'float'.
Als je er maar geen hangbrug mee gaat doorrekenen.

Wanneer je het getal bewaard als 'float', en je laat het zien op de seriële monitor, laat dan altijd een stuk of wat decimalen zien, want de Serial.println() gaat het default afronden naar 2 cijfers achter de komma.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Hoe sla ik een getal op met veel cijfers achter de komma

Berichtdoor nicoverduin » 23 Dec 2016, 19:18

Als je een grotere nauwkeurigheid wil hebben kun je overwegen om een 32 bitter te gebruiken. STM32 bijv. ondersteunt double waardoor je een nauwkeurigheid kan bereiken van rond de 15 cijfers. De 8 bitters hebben het nu eenmaal niet.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten