Kezdőoldal » Számítástechnika » Programozás » Free Pascalban a következő...

Free Pascalban a következő kifejezés értéke miért nem igaz? Rosszul számol a Free Pascal?

Figyelt kérdés

Ki lehet próbálni, 0-nak kellene lennie!

((8/27)*(8/27)) - ((4/9)*(4/9)*(4/9))=0;


Levezetve:

64/729 - 64/729 = 0


Lehet azért mert ingyenes?



#hiba #programnyelv #Free Pascal #programnyelv hiba
2023. jan. 2. 10:55
1 2 3 4 5 6
 11/53 anonim ***** válasza:
90%

Váó.

Na ezért keresek én szoftverfejlesztőként sokat.

2023. jan. 2. 13:36
Hasznos számodra ez a válasz?
 12/53 anonim ***** válasza:
79%

A PHP és a Pascal két elég különböző világ. A Pascal ún. erősen típusos nyelv, a PHP pedig dinamikus típusrendszert használ. Ebből fakadóan vannak komoly eltérések például a számolásban.


Pascal-ban az osztás eredménye mindig real típusú, aminek a pontossága a célplatformtól függ (4 vagy 8 bájt széles) Három dolgot kell tudnod: az egyik, hogy ezek ún. lebegőpontos számok. Ez azt jelenti, hogy a számot kettes számrendszerbeli normálalakban írjuk fel, vagyis egy nulla és egy közötti tört és kettő valahányadik hatványának a szorzata. A másik, hogy kettes számrendszerben sokkal több a végtelen tört, mint tízes számrendszerben, ezért a törtek átváltásai pontatlanságokat okoznak. A harmadik, hogy a fentiek miatt valós (lebegőpontos) számok összeadását mindig a legkisebb értékekkel kezdjük, és haladunk a nagyobbak felé, mert így a legkisebb a pontosság-vesztés.


Van egy másik lehetőség, a decimális típus (Pascal-ban Currency). Ezt kell olyankor használni, amikor a fenti kerekítési problémák nem elfogadhatóak, vagyis tipikusan akkor, amikor pénzről van szó.


Megjegyzem, a PHP 8 bájtos lebegőpontos számokat használ, bár szintén platform függő. Illetve az is kérdés, hogyan optimalizál a fordító (.Net explicit singe típussal szintén nullát ad, Mac saját számológépe viszont nem)

2023. jan. 2. 14:16
Hasznos számodra ez a válasz?
 13/53 A kérdező kommentje:
Válasz 12-esenek: a végtelen törteket is lehet kezelni. Két fajtája: van a végtelen szakaszos tizedes tört és a végtelen nem szakaszos tizedes tört. Az elsőre példa a prímszámok (kivéve 1, 2 és 5), a másodikra példa az irracionális számok a Pí, e, gyök stb... Amennyiben egy összetett számban van prím törzstényező (kivéve 1, 2 és az 5-öt), akkor az végtelen szakaszos tizedes tört. Amennyiben egy összetett számban csak 2-es és az 5-ös többszörösei szerepelnek, akkor az véges tizedes tört. Jó ez a Pascal, nagyon tetszik, csak sajnos nem jól számol.
2023. jan. 2. 15:05
 14/53 anonim ***** válasza:
80%

Te nem tudsz számolni.

Nem fogod fel ember, hogy ez számítógép, és nem ember?

Hogyan írod be memóriába 32 bitre, hogy ez egy végtelen szakaszos tört???

neked van 32 db 0 vagy 1-es, ezzel kell dolgoznod.

Olvass már utána a lebegőpontos számoknak!

És ez nem a "Pascal hibája", minden típusos nyelvnél így van.

2023. jan. 2. 15:40
Hasznos számodra ez a válasz?
 15/53 anonim ***** válasza:
85%

#13 - Az egy dolog, hogy te papíron, ceruzával 10-es számrendszerben meg tudod oldani. Az meg egy másik, hogy erre egy gép képes bináris számrendszerben. Nem véletlen írtam azt, hogy "végtelen tört", és nem azt végtelen tizedestört. Itt ugyanis minden esetben kettes számrendszerbeli alakokról beszélünk, és ott bizony az átváltásoknál gyakran előfordulnak furcsaságok.


Próbáld ki pl. PHP-ban, hogy mi a 35 - 34.99 kivonás eredménye. Súgok: nem 0.01 lesz.


A szakmai alázat azt jelenti, hogy elfogadod, hogy ezek kipróbált, ismert dolgok, és a legtöbb olyan esetben, amikor bugot vélsz felfedezni egy ilyen rendszerben, akkor valószínűleg te tévedsz. 15+ év alatt én mindössze két olyan helyzetbe futottam bele, amikor egy fordító hibásnak tűnő tárgykódot generált. Az első egy Pascal kód volt (de lehet, hogy ott valójában én hibáztam), a másik pedig egy C# kód (és lehet, hogy ott is csak nem ismertem valamit, és azért nem ment) Szóval kicsit hátrább az agarakkal.

2023. jan. 2. 16:45
Hasznos számodra ez a válasz?
 16/53 anonim ***** válasza:
81%
15, hagyd. Olyan hiányosságai vannak, amik szükségesek lennének már ahhoz is, hogy fő vonalakban megértse, amit írsz és amit korábban írtál neki.
2023. jan. 2. 16:49
Hasznos számodra ez a válasz?
 17/53 anonim ***** válasza:
86%

Amm kérdező kicsit szerintem nézz utánna annak a 2 es számrendszernek és a 10 es számrendszer tört számainak bináris számrendszerben. És ajánlom azt is hogy nézz utánna hogy a számítógép processzora hogyan kezeli az osztásokat.


Az hogy a PHP 0 ad, szerinted hogy jött ki? Elárulom, kerekítés. Szval ugyan úgy "szarul" számolt csak épp "jó" ereményt látsz.

Kerekíteni pedig te is tudsz :)

2023. jan. 2. 17:05
Hasznos számodra ez a válasz?
 18/53 anonim ***** válasza:

Ezért: [link]

(20.oldaltól)


[link]

2023. jan. 2. 17:07
Hasznos számodra ez a válasz?
 19/53 anonim ***** válasza:

"Az elsőre példa a prímszámok (kivéve 1, 2 és 5),"


Az 1 nem prímszám.

2023. jan. 3. 14:37
Hasznos számodra ez a válasz?
 20/53 A kérdező kommentje:
A lényegen nem változtat semmit.
2023. jan. 3. 16:10
1 2 3 4 5 6

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!