INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Problem mit "pow"
26.02.2021, 16:00 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2021 18:08 von awillib.)
Beitrag #1
Problem mit "pow"
Hallo,
beim Ausprobieren des Befehls "pow" mit folgendem Sketch bin ich auf ein Problem gestoßen.
Hier der Sketch:
Code:
int pause = 500;
int wert = 0;      // Zu übertragener Wert

void setup() {
  Serial.begin(9600);
  for ( int i = 0; i < 8 ; i++)
  {
    wert = pow(2, i);
    delay(pause);
    Serial.print (wert);
    Serial.print(", ");
  }
  Serial.println("Neuanfang");
}

void loop() {
  // put your main code here, to run repeatedly:

}

Der Serielle Monitor zeigt mir folgendes Ergebnis an:
1, 2, 3, 7 ,15, 31, 63, 127, Neuanfang
erwartet hätte ich:
1, 2, 4, 8, 16, 32, 64, 128, Neuanfang

Wenn ich die Werte für "i" direkt eingebe kommt das richtige Ergebnis.
Hat vielleicht jemand einen Tipp wo mein Fehler liegt?
Danke!
Gruß awillib
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2021, 16:06
Beitrag #2
RE: Problem mit "pow"
Setze Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Welcher Prozessor?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2021, 16:10 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2021 16:23 von MicroBahner.)
Beitrag #3
RE: Problem mit "pow"
Das Problem ist, dass Du 'wert' als int deklarierst. Da entstehen dann Feher bei der Umwandlung, denn pow gibt einen float-Wert zurück. Und da wird nicht gerundet, sondern abgeschnitten.
Wenn Du 'wert' als float deklarierst, stimmt das Ergebnis:
Code:
1.00, 2.00, 4.00, 8.00, 16.00, 32.00, 64.00, 128.00, Neuanfang

P.S. und setze deinen Code bitte zukünfitg in Code-Tags ( das # oben rechts im Editor). Oder am einfachsten in der Ide im Codefeld rechtsklicken und dann 'Für Forum kopieren' auswählen.

P.P.S Damit aus dem 'Abschneiden' eine Rundung auf ganze Zahlen wird kannst Du auch 0.5 addieren:
Code:
wert = pow(2, i) + 0.5;
dann stimmts auch mit 'int' wieder.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2021, 17:23
Beitrag #4
RE: Problem mit "pow"
Vielen Dank für die schnelle Antwort! Jetzt passt es.
Viele Grüße Wilhelm
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2021, 19:53
Beitrag #5
RE: Problem mit "pow"
Wenn es nur um Potenzen von 2 geht, dann ist shift viel besser:

Code:
wert = 1 <<  i;

Gruß
GuaAck
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2021, 12:25
Beitrag #6
RE: Problem mit "pow"
(26.02.2021 19:53)GuaAck schrieb:  Wenn es nur um Potenzen von 2 geht, dann ist shift viel besser:

Code:
wert = 1 <<  i;

Gruß
GuaAck

Danke für den Hinweis, shift habe ich bis jetzt nur für ein Lauflicht verwendet.
Ich wollte mir hier den pow Befehl näher anschauen, dazu habe ich mir nun eine LED-Leiste zusammengesteckt (Arduino Nano, Porterweiterung mit 74HC595 und 8 LED`s).
Pow() mit float zeigt jetzt zwar die richtigen Werte im seriellen Monitor an aber auf der binären Anzeige der LED-Leiste ist immer noch, ab dem zweiten Wert, der Wert um eins reduziert. Dies gilt auch für andere Basiswerte (3,4...).
Ich vermute, dass auch bei einer 7-Seg. Anzeige ein falsches Ergebnis angezeigt wird?!
Wenn man wie bereits o.a. zum Wert 0.5 od. 0.1 ect. dazu addiert stimmt die binäre Anzeige wieder.
WarumHuh??

Viele Grüße Wilhelm
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2021, 12:38
Beitrag #7
RE: Problem mit "pow"
z.B. 128.00 ist nicht genau 128, sondern evtl. knapp darunter (evtl. 127.99). Die 128.00 entsteht durch Rundung. Wenn Du jetzt 0.1 oder 0.5 hinzu addierst, kommt der Wert knapp über 128 (128.1) und die Umwandlung nach int schneidet einfach den Nachkommateil ab. Übrig bleibt 128.

Du kannst auch mal probieren, vor der Umwandlung nach int ein round zu machen. Damit sollte das Ergebnis auch wieder richtig sein.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2021, 13:47
Beitrag #8
RE: Problem mit "pow"
Wenn man solche Fragen hat sollte man sich einfach mal die arduino.cc Seite mit code Referenze merken, denn da steht unter pow() das die Funktion für float Werte gemacht ist.
Zitat:base: Die Zahl. Erlaubte Datentypen: float.
lgbk


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollt dann liest euch bitte diese Anleitung durch.

Ich spreche fließend Schwäbisch, Deutsch das Notwendigste und für die Begriffsstutzigen erprobtes Tacheles mit direkten Hinweisen ohne Schnörkel...

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem bei Multitasking und millis() Maxcruiser 41 1.678 01.06.2021 22:22
Letzter Beitrag: Maxcruiser
  Problem Relaisplatine Maui 14 1.215 23.03.2021 15:20
Letzter Beitrag: hotsystems
  Pwm Problem safitom 4 604 20.02.2021 12:14
Letzter Beitrag: safitom
  Problem mit "Keyboard" und "Mouse" LK2567 4 667 03.02.2021 16:11
Letzter Beitrag: MicroBahner
  const char zu int Konvertierung Problem Lumplux 1 457 02.02.2021 10:26
Letzter Beitrag: Lumplux
  Arduino Uno+ Ethernetshield W5100 Website Problem Justus S. 9 973 31.01.2021 17:37
Letzter Beitrag: Tommy56
Sad MAX7221 mit gemeinsamer Anode und Problem Dezimalpunkt daja64 11 953 30.01.2021 11:07
Letzter Beitrag: daja64
  LCD via I2C Backlight-Problem Herby007 10 1.156 06.01.2021 14:46
Letzter Beitrag: Herby007
  OLED Bildschirm Problem JoeIsFame 79 3.917 04.01.2021 06:41
Letzter Beitrag: Bitklopfer
  Problem mit Variablen & Ergebnis rev.antun 11 1.027 26.11.2020 15:47
Letzter Beitrag: rev.antun

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste