Matematika a micro:bit: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
(5 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 37: | Riadok 37: | ||
</source></tab> | </source></tab> | ||
<tab name="mBED C++"><syntaxhighlight lang=c style="background: Cornsilk"> | <tab name="mBED C++"><syntaxhighlight lang=c style="background: Cornsilk"> | ||
}</syntaxhighlight></tab> | /* !!! not fully tested !!! */ | ||
void main() | |||
{ | |||
float c = 0.1; | |||
c = c + c + c + c + c + c + c + c + c + c; | |||
printf("\n c = %f \n",c); | |||
if (c == 1.0f) | |||
printf("\n * Je to 1,0\n"); | |||
else | |||
printf("\n * Nie je to 1,0\n"); | |||
while (1) { /* relax */ } | |||
} | |||
</syntaxhighlight></tab> | |||
</tabs> | |||
<gallery heights=200px mode="packed"> | |||
Image:microbit-Math2.png|''Program v blokovom jazyku'' | |||
</gallery> | |||
<tabs> | |||
<tab name="Javascript"><source lang="javascript"> | |||
let a = 1 | |||
let b = 0.1 | |||
let c = -0.1 | |||
serial.writeValue("x", a + (b + c)) | |||
</source></tab> | |||
<tab name="MS Python"><source lang="python" style="background: LightBlue;"> | |||
a = 1 | |||
b = 1e+24 | |||
c = -1e+24 | |||
serial.write_value("x", a + (b + c)) | |||
</source></tab> | |||
<tab name="mBED C++"><syntaxhighlight lang=c style="background: Cornsilk"> | |||
/* !!! not fully tested !!! */ | |||
void main() | |||
{ | |||
float a = 1.0; | |||
float b = +0.1; | |||
float c = -0.1; | |||
printf("\n A: %f \n", a + (b+c) ); | |||
printf("\n B: %f \n", (a + b) + c ); | |||
while (1) { /* relax */ } | |||
} | |||
</syntaxhighlight></tab> | |||
</tabs> | </tabs> | ||
Doplňte program tak, aby vypísal aj výsledok so zmeneným poradím operácií (a+b) + c. | |||
{{qbox | text = Dostanete rovnaké, alebo rôzne výsledky? Prečo? }} | |||
A teraz skúste zmeniť hodnotu premennej b a c na 1e+21 resp. -1e+21. | |||
{{qbox | text = Dostanete rovnaké, alebo rôzne výsledky? Prečo? }} | |||
Pre akú hodnotu b a c sa výsledok zmení? | |||
Späť na [[Kurz micro:bit#Zbierka príkladov|zoznam príkladov....]] | Späť na [[Kurz micro:bit#Zbierka príkladov|zoznam príkladov....]] |
Aktuálna revízia z 16:46, 27. september 2023
Vyskúšajme, ako je na tom mikroprocesor v micro:bite s matematikou.
Prvý pokus spravíme s číslom 0,1. Spočítame ho trikrát za sebou a pozrieme sa, či je výsledok naozaj presne 0,3.
Viete vysvetliť, prečo je výsledok takýto? |
Skúste sa s programom pohrať a zamenťe číslo 0,1 napr. za 0,2 alebo 0,25 či 0,5. A čo tak 1/3 alebo trebárs 1 × 1024?
Dostanete rovnaké, alebo rôzne výsledky? Prečo? |
-
Program v blokovom jazyku
-
a jeho funkcia
Program používa dva rozličné spôsoby pre zobrazenie hodnoty premennej c. Pomocou príkazu shownNumber zobrazíme číslo na maticovom displeji micro:bitu (s obmedzenou presnosťou). Pomocou druhého príkazu writeValue pošleme hodnotu po sériovej linke (prenos cez USB) do počítača, kde ju môžeme vidieť v terminálovom okne.
let c = 0.1
c = c + c + c
basic.showNumber(3)
serial.writeValue("c", c)
c = 0.1
c = c + c + c
basic.show_number(3)
serial.write_value("c", c)
/* !!! not fully tested !!! */
void main()
{
float c = 0.1;
c = c + c + c + c + c + c + c + c + c + c;
printf("\n c = %f \n",c);
if (c == 1.0f)
printf("\n * Je to 1,0\n");
else
printf("\n * Nie je to 1,0\n");
while (1) { /* relax */ }
}
-
Program v blokovom jazyku
let a = 1
let b = 0.1
let c = -0.1
serial.writeValue("x", a + (b + c))
a = 1
b = 1e+24
c = -1e+24
serial.write_value("x", a + (b + c))
/* !!! not fully tested !!! */
void main()
{
float a = 1.0;
float b = +0.1;
float c = -0.1;
printf("\n A: %f \n", a + (b+c) );
printf("\n B: %f \n", (a + b) + c );
while (1) { /* relax */ }
}
Doplňte program tak, aby vypísal aj výsledok so zmeneným poradím operácií (a+b) + c.
Dostanete rovnaké, alebo rôzne výsledky? Prečo? |
A teraz skúste zmeniť hodnotu premennej b a c na 1e+21 resp. -1e+21.
Dostanete rovnaké, alebo rôzne výsledky? Prečo? |
Pre akú hodnotu b a c sa výsledok zmení?
Späť na zoznam príkladov....