• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
problem w programie Arduino
#4
Używanie typów zmiennopozycyjnych raz na sekundę to nic złego - ale w tym konkretnym programie faktycznie nie jest konieczne. Popatrz na kod:
Kod:
Speed = (counter / diskslots) * 60.00;

diskslots to stała ma wartość 6.0, czyli Twój kod to w rzeczywistości:

Kod:
Speed = (counter / 6.0) * 60.00;

Gdybyśmy po prostu zastąpili używanie float przez int, to kolejność operacji mnożenia i dzielenia ma znaczenie. Zobaczmy dla przykładu dwie wartości counter: 250 i 251.
Dla 250 mamy:
Speed = (250 / 6) * 60 = 41 * 60 = 2460
A dla 251:
Speed = (251 / 6) * 60 = 41 * 60 = 2460
Problem wynika z dzielenia counter przez 6, które powoduje błąd zaokrąglenia.
Używanie float w tym miejscu pomaga, ale nie jest konieczne - można po prostu zamienić kolejność operacji, najpierw mnożyć, a później dzielić.
Zobaczmy dla 250:
Speed = (250 * 60) / 6 = 2500
Dla 251:
Speed = (251 * 60) / 6 = 2510
Czyli zmieniając kod na:
Kod:
Speed = counter * 60 / diskslots
możesz mięć poprawne wyniki bez używania float.
W rzeczywistości możesz nawet zauważyć, że (60 / diskslots) to po prostu 6.
Czyli można napisać:
Kod:
Speed = counter * (60 / diskslots);

Co będzie odpowiadało po prostu:
Kod:
Speed = counter * 6
Dzięki temu nie tylko rezygnujesz z czasochłonnych operacji na typie float, ale pozbywasz się jeszcze dzielenia.
Nie wydaje mi się żeby to była przyczyna problemów, ale skoro pojawił się wątek float-ach to chciałem krótko podpowiedzieć, jak można się ich pozbyć Smile
 
Odpowiedź
  


Wiadomości w tym wątku
problem w programie Arduino - przez sewek10 - 15-11-2019, 22:48
RE: problem w programie Arduino - przez semi - 16-11-2019, 01:14
RE: problem w programie Arduino - przez sewek10 - 16-11-2019, 11:58
RE: problem w programie Arduino - przez semi - 16-11-2019, 12:58
RE: problem w programie Arduino - przez sewek10 - 16-11-2019, 13:09
RE: problem w programie Arduino - przez elvis - 16-11-2019, 12:40
RE: problem w programie Arduino - przez sewek10 - 16-11-2019, 12:57
RE: problem w programie Arduino - przez Agregacik - 16-11-2019, 14:03
RE: problem w programie Arduino - przez sewek10 - 16-11-2019, 14:33
RE: problem w programie Arduino - przez Agregacik - 16-11-2019, 15:07
RE: problem w programie Arduino - przez sewek10 - 16-11-2019, 23:33
RE: problem w programie Arduino - przez semi - 17-11-2019, 00:46
RE: problem w programie Arduino - przez sewek10 - 17-11-2019, 12:31
RE: problem w programie Arduino - przez Agregacik - 17-11-2019, 08:40
RE: problem w programie Arduino - przez sewek10 - 17-11-2019, 12:32
RE: problem w programie Arduino - przez semi - 17-11-2019, 16:39
RE: problem w programie Arduino - przez Jarewa0606 - 17-11-2019, 13:02
RE: problem w programie Arduino - przez Agregacik - 17-11-2019, 13:38
RE: problem w programie Arduino - przez elvis - 17-11-2019, 16:48
RE: problem w programie Arduino - przez sewek10 - 17-11-2019, 17:19

Skocz do:


Przeglądający: 1 gości