Diviziunea în C++ nu funcționează conform așteptărilor (Programare, C++, Divizia)

Psirus a intrebat.

Lucram la altceva, dar totul a ieșit zero, așa că am făcut acest exemplu minimalist, iar rezultatul este tot 0.

#include <iostream>

int main(int argc, char** argv)
{
  double f=3/5;
  std::cout << f;
  return 0;
}

Ce îmi scapă?

6 răspunsuri
user2100815

Îți lipsește faptul că 3 și 5 sunt numere întregi, deci obții o împărțire întregi. Pentru ca compilatorul să efectueze diviziunea în virgulă mobilă, faceți ca unul dintre ele să fie un număr real:

 double f = 3.0 / 5;

stângaîn jurul valorii de

Nu se face nevoie de să fie .0, , puteți face și 3./5 sau 3/5. sau 3e+0 / 5 sau 3 / 5e-0 sau 0xCp-2 / 5 sau… Este nevoie doar de un indicator implicat, astfel încât compilatorul să știe că trebuie să efectueze împărțirea în virgulă mobilă.

O altă posibilitate: double f=double(3)/5. Este mult mai mult de tastatură, dar nu lasă niciun dubiu asupra a ceea ce faceți.

Sau pur și simplu folosiți double f=.6, , care, de asemenea, rezolvă problema…

sergio

încercați asta:

double f = 3.0/5.0;

acest lucru ar trebui să rezolve problema ta

Diego Sevilla

Încercați să puneți un .0 după unul dintre divizori. Acest lucru le va converti în literali în virgulă mobilă.

Joe Tyman

Folosiți numere întregi. Puteți multe lucruri pentru a face constantele dvs. duble, cum ar fi stângile de la stânga la dreapta și de la stânga la dreapta, cu toate acestea nu este bine curat bine. Este greu de citit și confuz. Dacă doriți 3 și 5, faceți-le 3,0 și 5,0. Toată lumea va ști ce vreți să spuneți dacă va fi obligată să vă citească codul. O mare parte din ceea ce afirmă el/ea necesită de fapt să cunoști C/C++ și cum se stochează flotele pentru a face cap sau pajură.

Comentarii

  • Ei bine, am crezut că este evident că 0xCp-2 / 5 nu trebuia să fie luat foarte în serios! …Dar în ceea ce privește utilizarea 3.0: asta e o chestiune de gust. Eu personal urăsc să scriu așa, pentru că în știință, orice număr finit de cifre după virgulă insinuează un fel de imprecizie în valorile măsurate etc., așa că atunci când văd 3.0 mă gândesc întotdeauna la 3±.05, iar 3.0/5.0 înseamnă pentru mine 0,6±.01. Asta nu este dublă precizie! Eu prefer 3./5. –  > Por la stângaîn jurul valorii de.
  • Scopul mesajului meu a fost să fie mai ușor de citit. 3./5 nu arată ca o ecuație matematică standard. Trebuie să-ți cunoști publicul: Nu cred că posterul (dacă are probleme cu diferența dintre un real și int) programează pentru aplicații științifice de nivel înalt, așa că aș crede că mai simplu este mai bine. –  > Por Joe Tyman.
Färid Alijani

În cazul în care vă salvați variabilele generice cu int și doriți să obțineți raportul sub forma double:

using namespace std;
int main()
{
   int x = 7;
   int y = 4;
   double ratio;
   ratio = static_cast<double>(x)/static_cast<double>(y);
   cout << "ratio =t"<<ratio<< endl;
}

Tags:,