Kirjoittaja Aihe: Matematiikka-"skripti"  (Luettu 2463 kertaa)

petteriIII

  • Käyttäjä
  • Viestejä: 662
    • Profiili
Matematiikka-"skripti"
« : 06.07.14 - klo:14.31 »
Skriptiajurin matematiikka_funktiot
=======================

Ladattuasi matemaattiset_funktiot.txt saat avaamasi päätteen toimimaan päätteen lisäksi myös funktiolaskimena kun avattuasi päätteen annat liitoskäskyn: . ~/Lataukset/matemaattiset_funktiot.txt   (siis käskyn edessä piste_ja_välilyönti).
- tiedosto ei tarvitse suoritusoikeutta.

Eihän tämä skripti enää kelpaa kuin leikkikaluksi mutta tarkoitus olikin osoittaa että bash on hävinnyt huonommilleen sillä tämä olisi toiminut jo 1980 kun kilpailijat olivat lastenkengissään. Eikä bash-skriptejä enää edes tehdä sillä tekovaiheessa bash-skripti tekee yleensä mitä se itse haluaa kaheleine merkintätapoineen, kummallisine logiikkoineen ja näkymättömine merkkeineen - kirotun nöyryyttävää kun ei saa konetta taipumaan tahtoonsa. Eihän siinä voi tehdä muuta kuin uskotella että bash on paitsi etanahidas niin myös kyvytön. Mutta kyvytön bash ei ole.

Alunperi tarkoitus oli, että pääte toimii täysin niinkuin ennenkin, mutta toistaiseksi päätteen virhekäyttäytyminen on erilaista - eihän niitä vanhoistakaan virheviesteistä saanut tolkkua, mutta voihan siitä silti urputtaa. Mutta helpollahan tästä matikasta pääsee; ei tarvitse tehdä muuta kuin sulkea pääte ja avata uusi.

Toistaiseksi matematiikka_funktiot eivät toimi skriptiajurin skripteissä.

Muun matematiikan toiminta selviää parhaiten esimerkeistä mutta lukujärjestelmämuunnokset kaipaavat lisäselityksiä:

Teoriassa bc ei tarvitse scalea lukujärjestelmämuutoksiin sillä bc:llä on autoscale jota se käyttää mikäli scalea ei ole bc:n käskyssä määrätty suuremmaksi. Autoscalen arvo on bc:lle annetun luvun desimaalien lukumäärä joten koska desimaaliluvun peränollia ei kirjoiteta niin niiden puuttuminen aiheuttaa sen että bc lopettaa desimaaliluvuilla muunnoksen liian aikaisin ellei scalea ole määrätty.

Asiaa sotkee se, että kun desimaalien lukumäärä kasvaa niin matematiikka_funktioiden itsensäkin täytyy huomioida se. Siten esimerkiksi:
1. "laskun" 1e-78 tulokseksi tulee nolla jos unohtaa lisätä perään: des100.
2. vielä pahempi on aa1e-78 (aa on käsky muuntaa seuraava lukun kaksijärjestelmään) sillä siihen täytyy
   lisätä perään: des400
- muunnettavilla luvuilla saa olla etumerkkikin.
- matemaattisen toiminnan tulos on myös muuttujassa nimeltään tulos
- jos suljet tämän päätteen niin myös matemaattiset kyvyt häviävät ja jos avaat uuden päätteen niin uusi pääte ei osaa matematiikkaa ennenkuin annat tuon liitoskäskyn.
- itseasiassa matemaattiset_funktiot ovat skriptiajurissakin. Mutta skriptiajurissa on vanha versio kunnes kerkiän päivittämään sen.


Toiminnan oikeellisuuden tarkistamista:
=======================================

- bc sopii tajuttoman suurten, pienten ja moninumeroisten lukujen laskentaan. Eikä niiden käyttäminen ole pelkkää leikkimistä, sillä matematisen toiminnan tarkastuksissa ne varmistavat sen ettei minkään laskun välitulokset aiheuta virhettä lopputulokseen. 
- yksi ilmiö kannattaa huomioida: mitä nopeammin toimitaan niin sitä nopeammin syntyy sutta-ja-sekundaa kun harkitsee tekemisensä huonosti.

1. Ihan alkuunsa voit laskea mitä kaksijärjestelmässä on kymmenjärjestelmän luku 6+1/2^10 sillä sehän on päässälasku että tulos on 110.0000000001. Tässä on tälle skriptille muodostettu käsky: aa[6+1/2^10]
- on käytettävä hakasulkuja. Kaarisulut päätyvät useimmiten virheeseen.
- voit toki kirjoittaa myös: aa6.0009765625 - sillä 6+1/2^10 on 6.0009765625
                                                                                     
2. Tehdään muunnoskäsky kymmenjärjestelmästä kaksijärjestelmään luvulle: 12345678901234567890123456789012345678901234567890123456789012345678901234567890.24 josta tulee: aa12345678901234567890123456789012345678901234567890123456789012345678901234567890.24des264 . Tulosteessa on iso joukko ykkös-nollaa. Huomioi desimaalipiste puolivälissä lukua - voit käsitellä sen kummallakin puolella olevaa lukua itsenäisesti.

3. muunnoksen oikeellisuutta on vaikeaa tarkistaa missään - netissä on montakin matematiikkamoottoria mutta tämän luvun suuruus ja tarkkuus lienevät niille liikaa - eikä se tarkistaminen taida muuallakaan onnistua. Mutta bc:lle ne eivät ole edes suuria lukuja ja tässä skriptissä tarkistuksen voi suorittaa muuntamalla ensin kaksijärjestelmään ja heti takaisin kymmenjärjestemään yhdellä kootullakäskyllä:
bb[aa12345678901234567890123456789012345678901234567890123456789012345678901234567890.24des264]
Vastauksena pitää tulla:123456789012---.24 

4. toiminnan toteamisessa voi käyttää myös laskuja jotka ovat mielettömiä mutta joiden lopputulos selviää jo laskun esityksestä, esimerkiksi: aa[[2^1999-1]/2^1999]des2200 jonka tulos on: .<ja perässä 2000 ykköstä> . Ihan aluksi tulee virheviesti, mutta kyllä se vastauskin tulee kymmenkunnan sekunnin kuluttua. Tuo skaalausarvo 2200 on liioittelua, mutta 2000 pistäisi epäilemään että tulos johtuukin siitä.
- tuloksessa ei saa olla yhtään nollaa ja ykkösten lukumäärän pitää olla 2000. Ykkösten määrän voi tarkistaa heti muunnoksen jälkeen käskyllä: echo $tulos | wc -c, mutta se on kylläkin 2001 sillä siinä on mukana desimaalipiste.
- Tämä matematiikkaa osaava pääte toimii päätteenäkin melkohyvin, joten voit antaa käskyt tässäkin.

5. Mitäpä on 1.24e-78 kaksijärjestelmässä? Käsky on: des500aa1.24e-78. Tarkistus: des500bb[aa1.24e-78]
Ja esitysmuodon voi muuttaa takaisin tieteelliseksi käskyllä: sci .
 
« Viimeksi muokattu: 01.04.19 - klo:11.24 kirjoittanut petteriIII »