Kirjoittaja Aihe: round() ja rint() -funktioiden erot?  (Luettu 2236 kertaa)

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
round() ja rint() -funktioiden erot?
« : 04.12.07 - klo:12.13 »
Mitäs eroja mahtaa olla näillä kahdella funktiolla, jotka pyöristävät liukulukuja lähimpään kokonaislukuun? Ainakaan uClibc-kirjastosssa ei ole 'round':ia, mutta 'rint' löytyy. En ihan man-sivusta ymmärtänyt lukemaani. Glibc:stä tuo round sen sijaan löytyy.

Tarkoituksena on kääntää imlib2 -kirjasto uClibc:tä vasten. Käännös onnistuu ainoastaan, mikäli muutan kaikki: "round -> rint".

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: round() ja rint() -funktioiden erot?
« Vastaus #1 : 04.12.07 - klo:15.03 »
glibc:n dokumentaatio on tosiaan tältä osin aika hankalasti muotoiltu :)

round()-funktioperheestä sanotaan: ”These functions are similar to rint, but they round halfway cases away from zero instead of to the nearest even integer” eli pyöristetään aina itseisarvoltaan suurempaan lukuun (0,5 1:een, -0,5 -1:een). Näinhän se on yleinen käytäntö ohjelmoinnin ulkopuolellakin.

rint()-perhe taas pyöristää ”nykyisen pyöristystavan” mukaan.

Veikkaan (mutten tiedä), että rint() on sama kuin round(), jos asetat pyöristystavan oikein.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
Vs: round() ja rint() -funktioiden erot?
« Vastaus #2 : 18.12.07 - klo:15.27 »
Kiitoksia vastauksesta. En ole huomannut rint-funktion aiheuttavan mitään kummallista, joten saa olla toistaiseksi näin.