Pages

Thursday, September 03, 2015

Javacript, python si c# si operatia de impartire a numerelor intregi

În Python 2.7 găsesc supărător faptul ca împărțirea a doua numere întregi are ca rezultat tot un număr întreg chiar dacă împărțirea celor două numere nu este exactă. De la un limbaj dinamic m-aș fi așteptat să obțin un număr real, precum în Javascript:


C:\Users\>Daniel>node
> var a = 10;
undefined
> var b=3;
undefined
> a/b
3.3333333333333335

Javascript, intern, are doar singur tip de reprezentare a numerelor, 64-bit virgula mobila, acelasi cu double din c#.

Python în schimb suportă și tipul integer. Rezultatul împărțirii a doua numere întregi în Python 2.7 este întotdeauna un număr întreg:

In [1]: a = 10
In [2]: b = 3
In [3]: a/b
Out[3]: 3

Pentru a pentru a obține rezultatul corect trebuie sa convertim unul din operatori la tipul float.

In [5]: a/float(b)
Out[5]: 3.3333333333333335

Python 3 nu are această problemă, rezultatul împărțirii în astfel de cazuri fiind un număr real (true division).

Putem folosi și în Python2.7 operația de diviziune din Python 3  cu un import din __future__:

In [1]: from __future__ import division
In [2]: a = 10
In [3]: b = 3
In [4]: a/b
Out[4]: 3.33333333333333355


În C#, rezultatul împărțirii a doua numere întregi este tot un număr întreg, rezultat care nu ridică întrebări având în vedere faptul ca limbajul este static.


1
2
3
4
int a = 10;
int b = 3;

Console.WriteLine(a/b); // prints 3

Result: 3


REFERENCES:

- Python 2.7 Documentation, https://docs.python.org/2.7/library/stdtypes.html#numeric-types-int-float-long-complex
- Python 3.4 Documentation, https://docs.python.org/3.4/library/stdtypes.html#numeric-types-int-float-complex
- MDN, Numbers, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates
- How can I force division to be floating point in Python? http://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python
- Learning Python de Mark Lutz. Capitolul 5, Numeric Types
- Javascript: the Good Parts de Douglas Crockford. Capitolul 2. Grammar
- C# 5.0 in a Nutshell de Joe Albahari, capitolul 2 Numeric Types


No comments: