Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: problema numere reale  (Citit de 1090 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Dddarius95
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« : Aprilie 13, 2013, 20:04:05 »

Salut. Sunt incepator in C++. Nu stiu de ce in codul urmator timp este trunchiat la partea intreaga.

long double timp;
timp=d*3600/vi;  //d,vi sunt int-uri
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #1 : Aprilie 13, 2013, 20:16:21 »

Compilatorul presupune ca tipul final al unei operatii este dat de cel mai mare dintre tipurile elementelor care participa in operatie. In cazul tau, operatiile se executa in ordinea urmatoare (dupa cum si e normal): inmultire, impartire, atribuire. De aceea, cand este calculat rezultatul impartirii dintre d*3600 si vi, tipul considerat este int (operanzii fiind amandoi de tip int), iar abia la pasul urmator rezultatul este convertit la long double pentru ca timp (care abia acum participa la evaluare) este de tip long double. Rezultatul impartirii a doua elemente de tip intreg este partea intreaga (sau catul) corespunzator fractiei.

Niste idei despre cum poti rezolva problema:
Cod:
long double timp = (long double) d * 3600 / vi;
(convertesti d la long double si atunci toate operatiile se executa pe long double) sau

Cod:
long double timp = d * 3600.0 / vi;
(il folosesti pe fratiorul de tip double al lui 3600 si atunci toate calculele se executa pe double pana la atribuire cand rezultatul devine long double)

Dupa cum vezi, a doua varianta nu face exact ce vrei, dar e mai concisa si de multe ori suficienta.
Memorat

Am zis Mr. Green
Dddarius95
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #2 : Aprilie 13, 2013, 23:18:33 »

multumesc
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines