Autor Zpráva
WalWerin
Profil *
prosím, ještě bych potřeboval poradit jednu věc :( mám to trošku složitější, ale zjednoduším to: proč mi:
<?php
print cos(deg2rad(90))
?>
vyplivne:
6.1230317691119E-017 místo nuly a to tyhle samí blbosti to píše při 180 a 270 stupních
?
vím že otravuji ale stačila by mi česká stránka na které to najdu www.php.net je napůl anglicky a to je pro mě španělská vesnice
kuratkoo
Profil *
pouzivas jen cos? nebo i jine goniometricke f-ce?
kuratkoo
Profil *
<?php
$uhel = 90 * 2 * pi / 360;
print cos($uhel);
?>
WalWerin
Profil *
pouzívám všechno :) tan,cos i sin, ale tohle by melo fungovat pro vse ne? to je prevod z radianu na stupne, jenze me zajima co je prave to 6.1230317691119E-017 jinak díky už mohu pokračovat
PerToon
Profil
No nevím, ale možná je to nějaká kravina kvůli zaokrouhlování Pí... Protože to číslo je dost malý aby něco znamenalo...
WalWerin
Profil *
ne, nemohu protože mi to nejde :( mimochodem, nemohli bychom se domluvit na ICQ? bylo by to rychlejší a slibuji že už bych vícekrát neotravoval :)
WalWerin
Profil *
já potřebuji jen co nejjednodušeji zjistit sinus, cosinus nebo tangens u urcitýho čísla, přece v tom nemůže být taková věda... je zvláštní že to blbne jen u 90,180 a 270ti stupnćh
WalWerin
Profil *
a i když to přebedu ze stupní na radiany tak mi to vyhodi ten divnej tvar
<?php
$stup = 90;
$rad = 3.141592654 * $stup / 180;
$cos = cos($rad);
echo "$cos";
?>
napíše -2.0510342851735E-010
jen pro připomenutí ZŠ, 180 stupnů = pí radiánů
jen pro ty kteří znají funkci v php ale zapoměli na goniometrii
co sakra znamená to -2.0510342851735E-010
igamenir
Profil
> je zvláštní že to blbne jen u 90,180 a 270ti stupnćh
A jak si to zjistil? U 90,180 a 270 víš že to má být přesně 0, resp. 1, tak si všimneš i těch e-17.Třeba to blbne všude, jenom si toho nevšimneš, protože přesnou hodnotu nevíš.
igamenir
Profil
> $rad = 3.141592654 * $stup / 180;
Nemůžeš se divit s tak nepřesným pi.
Jak sem psal - je to zaokrouhlováním, tak zaokrouhluj.
WalWerin
Profil *
a kdyz dám třeba
<?php
$stup = 90;
$rad = 3.141592654 * $stup / 180;
$cos = cos($rad);
$vysledek = $cos * 10;
echo "$vysledek";
?>
tak to vyplivne
-2.0510342851735E-009 místo předešlého
-2.0510342851735E-010
takže fakt nevim :(
igamenir
Profil
OMG to jsou pokusy :)
-2.0510342851735E-010 = -2.05... * 10^-10
Po vynásobení 10 je pochopitelné, že se to sníží na 10^-9.
WalWerin
Profil *
pí je nekonečné takže se musí zaokrouhlit, ale co php bere jako přesnost? 100desetiných míst? 1000 ?
WalWerin
Profil *
počkej, takže ty říkáš že to ....E-010 je jako ...na -10tou ?
igamenir
Profil
Z manuálu:
M_PI = 3.14159265358979323846
PerToon
Profil
V Excelu se při =COS(RADIANS(90)) ukazuje naprosto stejný výsledek. 6.1230317691119E-017, netušil sem, že jste tak rychlí. Takže se nepočítá přesně pro 90° ale pro nějakou zaokrouhleninu, protože Pí. Takže s tou chybou se nedá dělat nic jinýho než to zaokrouhlit.
WalWerin
Profil *
ale počkat cos 90 stupnu je 0, teda aspon mi to tak rika kalkulacka a pokud zaokrohlim cokolo z toho co mi to napsalo tak to nula nebude nikdy
WalWerin
Profil *
ale ještě počkat ono 6.1230317691119 na -17 je přesně 0
igamenir
Profil
-2.0510342851735E-010 = -0.0000000020510342851735
To je nádherná nula :)
PerToon
Profil
Když to zaokrouhlíš na patnáct desetinných míst, tak už to bude nula.
WalWerin
Profil *
-2.0510342851735E-010 není přesně 0 ale já jsem vycházel z toho excelu a to je 0
WalWerin
Profil *
6.1230317691119E-017
-2.0510342851735E-010
ono totiž není úplně stejný výsledek že PerToone :)
PerToon
Profil
Podle toho na kolik míst to zaokrouhlíš, v případě excelu podle toho, jaký máš formátování buňky.
WalWerin
Profil *
-1.8369095307336E-016 cos 90 stupnu
-2.0510342851735E-010 cos 270 stupnu

neni nahodou cos 90 a 270 stupnu v obou pripadech 0 ?
jako možná že když se to vypočítá a zaokrouhlí na určitej počet desetinejch mist tak ta nula vyjde
igamenir
Profil
Přesně tak. Všechno se musí nějak zaokrouhlovat, když se počítá s iracionálníma (resp. reálnýma) číslama. Funkce v PHP zaokrouhlujou, funkce v Excelu zaokrouhlujou, kalkulačka zaokrouhluje ...
Nezbývá nic jiného než také zaokrouhlovat.
WalWerin
Profil *
no to je hezký že jsme na to přišli ale jak já udělam aby mi to vyplivlo jednoduse číslo v základnim tvaru? aby tam nebylo nakonci to E-xxx ale hned vypočítaný a zaokrouhlený třeba na 10 míst
igamenir
Profil
E-xxx je zápis reálného čísla v původním tvaru - reálná čísla se ukládají jako mantisaEexponent.
Při formátovaném (tj se zaokrouhlením) výpisu by to mělo zmizet.
WalWerin
Profil *
dobrá zkusím
WalWerin
Profil *
<?php
$cosstup = cos(deg2rad(90));
echo round($cosstup, 10);
?>
napíše 0
díky chlapy
Toto téma je uzamčeno. Odpověď nelze zaslat.

0