Problém - typy – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém - typy – C / C++ – Fórum – Programujte.comProblém - typy – C / C++ – Fórum – Programujte.com

 

crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #1
-
0
-

Čaute,
mam takový problém a už si nevím rady. Počítám ve svém programu s odmocninami. Čísla ukládám do double. Ale když mam

double x = sqrt(13)

tak mi to vrátí pouze 6 desetinných míst, což pak radikálně změní výsledek.
Zkoušel jsem i
double x = double(sqrt(13));

ale nejde....
Prosím poraďte... předem díky

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
yaqwsx+9
Posthunter
17. 8. 2008   #2
-
0
-

A zkoušel jsi:

double x = sqrt(double(13));

long double y = sqrt(long double(13));

To pouze tipuju, opravte mě jestli je to špatně.

Nahlásit jako SPAM
IP: 85.160.81.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #3
-
0
-

To yaqwsx : pořád je tam jenom 6 desetinných míst :(

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
17. 8. 2008   #4
-
0
-

Mam pocit ze math.h je v tomhle dost limitovany, mozna mudes muset pouzit nejakou sofistikovanejsi knihovnu

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #5
-
0
-

To CommanderZ : jj já vím, ale jakou? přece musí existovat způsob jak to vypočítat :)

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Jura
~ Anonymní uživatel
637 příspěvků
17. 8. 2008   #6
-
0
-

To crAzY^ :

Zdravím,

to že ti vrací jen 6 číslic zjišťuješ jak? Výpisem do konzole? Pokud ano, tak se na ta čísla koukni přes debugger, pak nebudou mít 6 číslic. Výpisy jsou zaokrouhleny, ale pokud přesto chceš vidět i ostatní destinná místa, tak pak to lze udlět třeba takto:



printf("%.8f", dMojeCisloNaOsmDesetinnychMist);


V C++ je to tu někde na foru taky popsáno. Ale bacha ty čísla nejsou nekonečná;)

Nahlásit jako SPAM
IP: 85.207.192.–
Earl Cash0
Věrný člen
17. 8. 2008   #7
-
0
-
Nahlásit jako SPAM
IP: 193.85.184.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #8
-
0
-

To Jura : nejde mi o to co to vypíše do konzole, de mi o to že ten výsledek je pak špatný (nebo velmi nepřesný)

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #9
-
0
-

mam to asi takhle



double x = double(sqrt(13));
double y = sqrt(4);
double z = sqrt(2);

double s = (x+y+z)/2;

double res = double(sqrt((x-s)*(y-s)*(z-s)));

res je pak hodně nepřesný. Poraďte jek to ošetřit

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Jura
~ Anonymní uživatel
637 příspěvků
17. 8. 2008   #10
-
0
-

To crAzY^ :

Definuj hodně nepřesný. Jde o to, že reálná čísla mají v PC omezenou přesnot. Jak velkou tu přesnot potřebuješ? pokud ti nevyhovuje tak zkus long double(ale pozor, může mít stejný počet platných číslic jako klasický double), a pokud ani to ne, tak nějakou knihovnu na počítání s velkými čísly. Případně napiš jaké vypočty provádíš?

Nahlásit jako SPAM
IP: 85.207.192.–
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #11
-
0
-

To Jura : no má to být obsah trojúhelníku, který definuju třemi body. Pak z toho zjistím délky stran (x, y, z) a pak se z toho snažím vypočítat obsah. obsha by měl vyjít 1.5 a program mi hází asi 1.44

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Earl Cash0
Věrný člen
17. 8. 2008   #12
-
0
-

To crAzY^ : taky je mozne, ze to kalkulacka zaokrouhluje.....

Nahlásit jako SPAM
IP: 193.85.184.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #13
-
0
-

To Earl Cash : to ne má to tak být, když vemu výšku troj. * strana/2 = 1.5 ! ale při výpočtu s = (x+y+z)/2; res = sqrt((x-s)*(y-s)*(z-s)); se to jaks i liší... já už fakt newim co s tim

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #14
-
0
-

ok hodim to sem celý...
nelekejte se sem začátečník.
u tohoto trojúhelníka má být obsah 1.5 a vypisuje 1.44626. pls kde mam chybu

#include <iostream>

#include <cmath>

using namespace std;

struct pozice {

int x;
int y;

};

int main(void)
{
pozice bodA, bodB, bodC;

bodA.x = 0;
bodA.y = 0;
bodB.x = 3;
bodB.y = 0;
bodC.x = 0;
bodC.y = 2;

//strana1

double _a, _b, strana1;

_a = abs(bodA.x - bodB.x);
_b = abs(bodA.y - bodB.y);

strana1 = sqrt((_a*_a)+(_b*_b));

//strana2

double _c, _d, strana2;

_c = abs(bodB.x - bodC.x);
_d = abs(bodB.y - bodC.y);

strana2 = sqrt((_c*_c)+(_d*_d));

//strana3

double _e, _f, strana3;

_e = double (abs(double(bodA.x - bodC.x)));
_f = double (abs(double(bodA.y - bodC.y)));

strana3 = double (sqrt(double((_e*_e+_f*_f))));

//vysledek

double vysledek, s;

s = (strana1 + strana2 + strana3)/2;

vysledek = double (sqrt(double((s - strana1)*(s - strana2)*(s - strana3))));

cout << vysledek;

cin.get();
cin.get();
return 0;
}

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
mylan40
Super člen
17. 8. 2008   #15
-
0
-

A si si istý, že používaš správny vzorec?
S = sqrt ( s (s – a)(s – b)(s – c) ) s = (a + b + c) / 2
http://sk.wikipedia.org/wiki/Trojuholn%C3%ADk
Z tvojho kódu res = sqrt((x-s)*(y-s)*(z-s)) by som povedal, že to tam máš nejaké prehodené: x - s, malo by byť s - x a chýba ti tam pod odmocninou * s.

Nahlásit jako SPAM
IP: 85.248.56.–
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #16
-
0
-

To mylan4 : sak ja to mam s-x, dekuji za upozorneni na chybajici s pod odmocninou ale ted to hazi vysledek 3

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
17. 8. 2008   #17
-
0
-

jaj sry, už vyřešeno. všem díky za rady byla to moje blbá chyba

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 61 hostů

Podobná vlákna

Wi-Fi typy — založil Jirka

Datove typy — založil repu

Genericke typy — založil Dammit

Datové typy — založil Martin

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý