reaalilukujen vertailu

Kertoisko joku miten c:llä (ilman plussia) pystyy vertailemaan käyttäjän antamaa reaalilukua johonkin muuhuun reaalilukuun. Eli onko samat vai ei. Ongelma tulee, jos verrattavat ovat irrationaalilukuja eli päättymättömiä lukuja.
4366
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

hmm...
missä muodossa tuo reaaliluku on, ja miten se syötetään ?

jos on double/float niin sen vertailu menee normaalisti

if (l1 != l2)

Äänestä

Yleensä reaalilukuja ei pidä vertailla == tai != operaattoreilla koska tulos on epävarma.

Parempi tapa on laskea niiden erotus ja verrata sitä ennalta määritettyyn vakioon. Tarkoituksesta riippuen se voi olla vaikka 1/1000 tai jotakin ja jos erotus on tätä pienempi niin luvut tulkitaan samaksi.

if(abs( y - x ) < eps) //"sama" luku

Monesti tuo on tehty funktioksi isEqual(x,y) joka palauttaa tietyn arvon jos luvut on tarpeeksi lähellä toisiaan.

Äänestä
  • Kiitti! Oishan tuo pitänyt itekin tajuta. Ite mietin ratkaisua vaan vähän eri kautta. Tossa muuten pitää olla "fabs" "abs":n tilalla. "abs" on kokonais luvuille ja "fabs" reaaliluvuille!

    Äänestä

  • tebu kirjoitti:

    Kiitti! Oishan tuo pitänyt itekin tajuta. Ite mietin ratkaisua vaan vähän eri kautta. Tossa muuten pitää olla "fabs" "abs":n tilalla. "abs" on kokonais luvuille ja "fabs" reaaliluvuille!

    >...muuten pitää olla "fabs"

    Niin pitääkin. Terävä huomio. ;-)

    Äänestä

Kommentoi aloitusta


tebu kirjoitti:

Kertoisko joku miten c:llä (ilman plussia) pystyy vertailemaan käyttäjän antamaa reaalilukua johonkin muuhuun reaalilukuun. Eli onko samat vai ei. Ongelma tulee, jos verrattavat ovat irrationaalilukuja eli päättymättömiä lukuja.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu