C-ben n. gyök vonás?
A programnyelvek nem igazán kezeli a hagyományos törteket, inkább csak a tizedes törteket.
Ha pow(1/3)-at adsz meg neki, azt kiszámolja: 1/3 = 0, mert egészekkel számolunk. pow(1.0/3) így add meg neki és akkor ki fogja számolni.
"A programnyelvek nem igazán kezeli a hagyományos törteket, inkább csak a tizedes törteket. "
Szerintem te a közönséges törtekre gondolsz. (Vagyis a racionális számok halmazára). Való igaz, hogy nem kezel semmilyen programnyelv tetszőleges közönséges törtet, viszont annak, hogy milyen kezel, annak csak a memória szab határt Turing-teljes nyelvek esetén. (Végtelen Turing gép képes kezelni a teljes racionális számhalmazt).
Persze, a C-ben például nincs közönséges törtet ábrázoló típus, de ilyet viszonylag egyszerűen lehet írni, vagy beszerezni máshonnan. Ha csak egy adott műveletet kell kezelnie, akkor egy struct is megteszi.
Megjegyzem, a tizedes törtek is közönséges törtek (racionális számok), csupán egy más felírási alakról van szó. Tizedes tört alakban irracionális számnak (tehát olyan számnak, ami nem közönséges tört) csak a megközelítését lehet felírni. Ugyanezt a hagyományos a törve b alakban is meg lehet tenni. Tehát, a tizedes törtek csupán a közönséges törtek egy részhalmazának leírására alkotott írásmódot jelentik. Sőt, az 1/3-ot tizedes tört alakban például az ismétlődés szabályszerűségének egyértelmű leírásával ki lehet fejezni. Pl. így: 0.33..3
Amivel szerintem te kevered, az a lebegőpontos tört fogalma. A kettő nem ugyanazt jelenti, távolról sem. A lebegőpontos számok inkább hasonlíthatóak a középiskolában tanult normálalakhoz. De ennél árnyaltabb a dolog. A lényeg, hogy a lebegőpontos számok halmaza egy sokkal szűkebb, az adott szabványnak megfelelő elemeket tartalmazó, általában véges halmaza, míg tizedes törtekkel végtelen számot lehet leírni. A részletekről ajánlom Járai Antal - Bevezetés a matematikába című könyvét. Annak van egy informatikai alkalmazásokkal bővített változata, ahol ez részletesen le van írva.
És itt jutottunk el a kérdező által vétett hibához: a C programozási nyelvben az 1/3 egy egészosztást jelent, mivel 1 és 3 egész számok. A C szabvány szerint tehát ennek az eredménye egy maradékos egész szám. A maradék a % operátorral használható. Az 1/3 eredménye nulla, maradt a 3, ezért nem működött a program.
Lebegőpontos osztást így lehet csinálni C-ben: 1.0/3.0
Ennek az eredménye már megközelítőleg 0.3333 lesz, így működni fog a program.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!