01-11-2017, 12:21
Cześć.
Napotakłem na ciekawy problem. Czy ktoś go może wytłumaczyć? A jak temu zapobiec?
W wyniku uruchomienia poniższego kodu, w monitorze dostajemy dwa wyniki (oba poprawne): 24000;
Jeśli natomiast przypisanie wartości do zmiennej z=48 przeniesiemy w kodzie nieco wyżej, zaraz pod Serial.begin, czyli:
w monitorze zobaczymy:
24000
23999
Dlaczego druga wartość jest błędna?
Zauważyłem również, że taka konstrukcja da poprawne wyniki:
jak i również zadeklarowanie z wewnątrz setup() również poprawnie wyświetli wartości, czyli:
Testy przeprowadzałem na Arduino UNO w IDE 1.8.5.
Pozdrawiam, Marcin
Napotakłem na ciekawy problem. Czy ktoś go może wytłumaczyć? A jak temu zapobiec?
W wyniku uruchomienia poniższego kodu, w monitorze dostajemy dwa wyniki (oba poprawne): 24000;
Kod:
long z;
void setup()
{
Serial.begin(9600);
unsigned long x = func(6000, 24, 48);
Serial.println(x);
z = 48;
unsigned long y = func(6000, 24, z);
Serial.println(y);
}
unsigned long func(unsigned long a, int b, long c)
{
return a * (pow(2, (c / (float)b)));
}
void loop()
{
}
Jeśli natomiast przypisanie wartości do zmiennej z=48 przeniesiemy w kodzie nieco wyżej, zaraz pod Serial.begin, czyli:
Kod:
void setup()
{
Serial.begin(9600);
z = 48;
unsigned long x = func(6000, 24, 48);
Serial.println(x);
unsigned long y = func(6000, 24, z);
Serial.println(y);
}
w monitorze zobaczymy:
24000
23999
Dlaczego druga wartość jest błędna?
Zauważyłem również, że taka konstrukcja da poprawne wyniki:
Kod:
void setup()
{
Serial.begin(9600);
z = 48;
unsigned long x = func(6000, 24, 48);
unsigned long y = func(6000, 24, z);
Serial.println(x);
Serial.println(y);
}
jak i również zadeklarowanie z wewnątrz setup() również poprawnie wyświetli wartości, czyli:
Kod:
void setup()
{
Serial.begin(9600);
long z = 48;
unsigned long x = func(6000, 24, 48);
Serial.println(x);
unsigned long y = func(6000, 24, z);
Serial.println(y);
}
Testy przeprowadzałem na Arduino UNO w IDE 1.8.5.
Pozdrawiam, Marcin