Neljanda kodutöö kaitsmine paaristööna

  1. Kui teil pole oma töö viimast seisu bitbucket'is (või github'is), siis looge KOHE PRAKTIKUMI ALGUSES versioon (commit) "Enne kaitsmist" ning laadige see üles. Vajadusel vaadake esimese praktikumi materjale. Kindlasti peab versioonihalduses olema ka testfail LfractionTest.java
  2. Õppejõud määrab teile paarilise selleks praktikumiks. Liikuge oma paarilise juurde.
  3. Avage (mõlemad paarilised) oma kodutöö IntelliJ's (vm. IDEs, et seda oleks võimalik muuta ja testida). Täna on testide töötamine teie arvutis oluline.
  4. Edasi on kaks tööd, mida võite vabalt omavahel jagada: arendamine ja testimine. Üks paariline ("arendaja") vastutab faili Lfraction.java eest, teine paariline ("testija") faili LfractionTest.java eest.
  5. Arendamine:
Lisage meetod valueOf signatuuriga public static Lfraction valueOf (double df) , mis leiab reaalarvu df parima esituse murruna (vähima nimetajaga murd, mille väärtus on võrdne df-ga tüübi double täpsuse piires). Selgituseks: long-tüüpi täisarvude paar võimaldab murru arvväärtust kujutada palju täpsemalt kui double tüüp Javas, seega tuleks leida vähima nimetaja väärtusega murd m et kehtiks df==m.toDouble() täpselt.
Leidke märksõna "ahelmurdude meetod" abil sobiv algoritm. Mõned näited  (kehtivad ainult Java long ja double tüüpide korral), mida testida:
0.0 : 0 / 1
0.125 : 1 / 8
-2.5 : -5 / 2
Math.PI: 245850922 / 78256779
Math.E: 325368125 / 119696244
Math.sqrt(2.): 131836323 / 93222358
...
  1. Testimine: Kirjutage  umbes 7 - 9 testjuhtumit (s.h. toodud näited ja Math.random()) ja lisage need olemasolevatele testidele (kasutage junit4 raamistikku, näitena vaadake testifaili LfractionTest.java).
    Täpse võrdluse jaoks sobib meetod Double.doubleToLongBits(df)  Murru nimetaja ei tohiks olla suurem kui 1 miljard (1000000000L).
  2. Tehke uus versioon (commit"Arendaja: Nimi, Testija: Nimi" ning laadige see bitbucket'isse (või github'i), paariline teeb oma koodiga sama. Tehke seda alles siis, KUI TESTIMISE OSA TÖÖTAB.
  3. Näidake koos paarilisega see viimane commit bitbucket'is (või github'is) ning testide ja näidete töötamine õppejõule ette. Teste saab käivitada ka käsurealt, kui IDEs on mingi probleem.
  4. Õppejõud vestleb ja küsib küsimusi teie töö kohta, kui kõik on korras, siis kannab hinded ÕISi.

Jaanus Pöial

  Näide Math.PI lähendamisest:
3 / 1
22 / 7
333 / 106
355 / 113
103993 / 33102
104348 / 33215
208341 / 66317
312689 / 99532
833719 / 265381
1146408 / 364913
4272943 / 1360120
5419351 / 1725033
80143857 / 25510582
245850922 / 78256779 (viimane double täpsuse piires)
817696623 / 260280919  (liiga täpne double jaoks, ei lähene enam tegelikule pii väärtusele)
...
3857417000399352 / 1227853966360537 (siin tuleb vastu long tüübi piir)