Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Stocare infiniti in variabile  (Citit de 1653 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Bit_Master
Vorbaret
****

Karma: -49
Deconectat Deconectat

Mesaje: 159



Vezi Profilul
« : Februarie 18, 2011, 15:13:31 »

Am observat de ceva timp o diferenta mare in ceea ce priveste operatiile din C# vs C++.

La overflow, variabilele din C++ intra pe numere negative, in timp ce cele din C# iau valoarea unei constante ce reprezinta infinit.
Si de aici toate operatiile de fac corect.
INF + const = INF
INF - const = INF
INF * (-1) = -INF

la nedeterminari inca n-am incercat sa vad ce face, dar mi se pare o chestie destul de utila pt proiectele mai mari.

Oare operatiile sunt incetinite mult din cauza asta? Stiu ca in C++, nr ies negative pt ca asta obtii daca aplici operatiile, in C# or fi ceva if-uri in cadrul operatiilor ca sa puna valoarea INF?
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #1 : Februarie 21, 2011, 20:45:51 »

Ai inf pe double, e util daca vrei sa sortezi dupa tangenta de exemplu. Cred ca daca incerci atan(pi/2) obtii asta. Functioneaza compararea bine, nu sunt sigur insa in priviinta operatiilor.
Memorat
Bit_Master
Vorbaret
****

Karma: -49
Deconectat Deconectat

Mesaje: 159



Vezi Profilul
« Răspunde #2 : Februarie 22, 2011, 15:34:05 »

Ai inf pe double, e util daca vrei sa sortezi dupa tangenta de exemplu. Cred ca daca incerci atan(pi/2) obtii asta. Functioneaza compararea bine, nu sunt sigur insa in priviinta operatiilor.
si daca pe urma aduni 100 sau scazi 100, ramane INF?
Si daca inmultesti cu -1, ajunge -INF?
Memorat
NXJoker
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #3 : Martie 16, 2011, 23:17:36 »

trece la ca fiind inf/-inf orice nr care depaseste limita doubel-ului. daca incerci pe urma sa scazi din el sa sa aduni nu se schimba dar daca il inmultesti cu -1 trece la -inf/inf... dar poti sa experimentezi si tu singur singur in mingw;d
Memorat
chibicitiberiu
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 49



Vezi Profilul
« Răspunde #4 : Martie 18, 2011, 22:25:27 »

In C++ exista la tipul de date float/double variabila de tipul NaN (Not a Number), care e mai ciudat.
(de exemplu daca f = NaN, expresia (f != f) are rezultat 'True').

Totusi in C++ poti creea o clasa care sa substituie tipul de date pe care il vrei.

Aici e un exemplu foarte simplu:

Cod: (c++)
class Int
{

public:
   int value;

   int Inf;

   Int() { Inf = 0x7FFFFFFF; }
   Int(int val) { value = val; Inf = 0x7FFFFFFF; }
   
   Int operator+ (Int b)   { 
          if (value != Inf && value != -Inf && b.value != Inf && b.value != -Inf) return Int(value + b.value);
          if (value == Inf || value == -Inf) return Int(value);
          return Int(b.value);
   }
};

La fel pot fi definiti toti ceilalti operatori. (-*/)

Pentru produs si diferenta este putin mai delicat, pentru ca poti avea nedeterminari (de exemplu Inf/Inf, 0/0, Inf-Inf etc).
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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