'else' without a previous 'if'

algemene C code
Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 'else' without a previous 'if'

Berichtdoor shooter » 02 Dec 2016, 19:06

ja dan onderdruk je ze wel, maar ze staan er wel, en als het klein is dan merk je het niet, maar vul maar eens belachelijk grote getallen in.
paul deelen
shooter@home.nl

Advertisement

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

Re: 'else' without a previous 'if'

Berichtdoor nicoverduin » 02 Dec 2016, 21:11

Zoals shooter al aangeeft: floats hebben een nauwkeurigheid van 6-7 cijfers. Dus als jij met een getal komt van 10.278.324,12433 dan ga je wat cijfers verliezen. Op 32 bits heb je al wat meer mogelijkheden omdat je dan met 15 cijfers ongeveer kan werken. Op een STM32 processor heb ik dtostrf() aangepast om een maximale nauwkeurigheid te behalen. Na 15 cijfers was het wel afgelopen en krijg je vreemde getallen. Overigens double wordt bij Arduino omgezet en behandeld als een float dus double invullen levert geen verschil.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: 'else' without a previous 'if'

Berichtdoor Koepel » 02 Dec 2016, 21:39

Test sketch:
Code: Alles selecteren
void setup()
{
  Serial.begin( 9600);
  Serial.println( "Drie is geen drie");

  float drie = 2.999999;

  Serial.println( drie, 0);
  Serial.println( drie, 8);
}

void loop()
{
}
Deze drukt af "3" en "2.99999904" op een Arduino Uno met Arduino.cc IDE 1.6.13. Dat zijn dus twee verschillende dingen voor hetzelfde getal. Dit zijn de grenzen van 'float' samen met de grens opzoeken van "Serial.println()".

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

Re: 'else' without a previous 'if'

Berichtdoor Koepel » 03 Dec 2016, 02:54

Ik zat fout! De Serial.println() blijkt af te ronden, terwijl ik dacht dat de cijfers achter de komma afgekapt werden. Dus als je 2.5 afdrukt met nul decimalen dan wordt het ook drie.
Het probleem dat ik probeerde duidelijk te maken kan ik alsnog voor elkaar krijgen op deze manier:
Code: Alles selecteren
void setup()
{
  Serial.begin( 9600);
  Serial.println( "Drie is geen drie");

  float drie = 2.4999999;

  Serial.println( drie, 0);
  Serial.println( drie, 8);
}

void loop()
{
}
Daar komt uit: "3" en "2.50000000".

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: 'else' without a previous 'if'

Berichtdoor benvo » 03 Dec 2016, 19:35

Dit afronding sketchje moet, niet noodzakelijkerwijs precies in deze vorm, straks een deel worden van een groter programma. Dat zou een sketch moeten worden voor een aquarium led verlichting controller. De afronding ben ik dan nodig omdat ik op mijn LCD scherm wil kunnen zien met hoeveel procent lichtintensiteit de desbetreffende led lichtbalk op dat moment brand. Hoe groot, beter gezegd, met hoeveel getallen achter de komma er gewerkt wordt alvorens er op een percentagegetal afgerond wordt weet ik nu eigenlijk nog niet. Er moet nog heel veel uitgezocht worden...

Overigens lees ik de gezonden argumentatie met heel veel belangstelling! Wie weet komt het mij van pas...


Groet,
Ben.

Vorige

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten