Operácie

Matematika a micro:bit: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Vytvorená stránka „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ýs…“
 
Balogh (diskusia | príspevky)
Bez shrnutí editace
 
(13 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 3: Riadok 3:
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.  
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?  
{{qbox | text = 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. Dostanete rovnaké, alebo rôzne výsledky? Prečo?




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 × 10<sup>24</sup>?
{{qbox | text = Dostanete rovnaké, alebo rôzne výsledky? Prečo? }}
<gallery heights=200px mode="packed">  <!-- slideshow? -->
<gallery heights=200px mode="packed">  <!-- slideshow? -->
Image:microbit-Math1.png|''Program v blokovom jazyku''
Image:microbit-Math1.png|''Program v blokovom jazyku''
Riadok 13: Riadok 16:
</gallery>
</gallery>


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.


<tabs>
<tabs>
<tab name="Javascript"><source lang="javascript">
<tab name="Javascript"><source lang="javascript">
let c = 0.1
c = c + c + c
basic.showNumber(3)
serial.writeValue("c", c)
    
    
</source></tab>
</source></tab>
<tab name="MS Python"><source lang="python" style="background: LightBlue;">
<tab name="MS Python"><source lang="python" style="background: LightBlue;">
c = 0.1
c = c + c + c
basic.show_number(3)
serial.write_value("c", c)


</source></tab>
</source></tab>
<tab name="uPython"><source lang="python" style="background: LightBlue;">
<tab name="mBED C++"><syntaxhighlight lang=c style="background: Cornsilk">
/* !!! 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>
</source></tab>
<tab name="Arduino C++"><syntaxhighlight lang=c style="background: Cornsilk">
}</syntaxhighlight></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 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 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 */  }
}



 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....