Este o comparație pentru depășirea stivei duble în rusă în siguranță?

  1. În ce condiții, securitatea comparării la == devine scăzută? Este necesar să se înmulțească o variabilă, să se împartă sau că, dublul a început să arate o eroare ca nu 0. Și 0.00000001. și este necesar să se aplice epsilon, mai degrabă decât o simplă comparație.
  2. În setările compilatorului există o opțiune: Modelul de calcul cu un punct de plată (exact, strict, rapid). Ce afectează, dacă este setat la "rapid", atunci dublul nu va funcționa exact?

a fost văzut ultima dată 14 februarie '15 la ora 9:17







Comparația cu egalitatea strictă este aproape niciodată sigură. În schimb, ar trebui să utilizați fabs (x-y)

Singurul caz când vă puteți permite o comparație strictă - este în cazul în care există o anumită constantă, pe care le puteți atribui (evident, fara calcul), și care compară pentru a vedea dacă a fost rebindings. Și chiar în acest moment, este necesar să fie atent, deoarece există cazuri în care, datorită optimizării două valori comparate este un tip diferit, ceea ce duce la o precizie și de inegalitate variabile.







Totuși toate calculele cu numere întregi de până la 2 53 sunt exacte. Acest lucru este utilizat de limbi cu un singur tip numeric (de exemplu, js). Cu toate acestea, dacă sunteți sigur că valoarea este un număr întreg, atunci de ce folosiți un dublu la toate? Este mai bine să luați un număr întreg de 64 de biți.

Dacă doriți să comparați două dubluri. Cel mai bine este să folosiți o astfel de comparație (după semn <вы указываете до какого знака после запятой вас интересует сравнение):

Dacă instrucțiunea if este executată, cele două duble sunt egale.

Postat pe Feb 17, la 9:35 am

Cum diferă acest răspuns de ceilalți? - Qwertiy ♦ 17 februarie la 10:52

@Qwertiy Cred că această metodă va fi mai clară pentru începători, nu utilizează nici o funcție - Alex Feb 17 at 11:07 am

Deci și eu nu folosesc :) - Qwertiy ♦ 17 februarie la 12:43

Nu știu dacă sfatul meu vă va fi de folos. Când lectură unele puncte în funcție de fișier - date în trepte (0.1), pe abscisă, sau cu un pas aleator, eu de obicei, fără a sacrifica precizia încerca abscisa exprimate prin fracții binare (numitor = 2 ^ n). De exemplu, 0,1 =

51/512. Și apoi, cu ajutorul interpolării, schimbăm abscisele și ordonanțele. Apoi comparația ==, <и> să devină corectă. Este nevoie de mult timp pentru a interpola datele și nu afectează precizia.

răspuns dat dat 14 februarie '15 la 11:41







Articole similare

Trimiteți-le prietenilor: