HighDots Forums  

Problema con float di grandi dimensioni

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss Problema con float di grandi dimensioni in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
programmer
 
Posts: n/a

Default Problema con float di grandi dimensioni - 11-14-2004 , 12:13 PM






Salve,

ho un problema con i numeri float.
Allego un esempio,

function showNumber() {
var nn1 = 1234567890123456;
var ss1 = "1234567890123456";

var ss2 = "1234567890123456789";
var nn2 = 1234567890123456789;

alert(nn1 + "\n" + ss1);
alert(nn2 + "\n" + ss2);
var bb = nn1 > Number.MAX_VALUE
alert(bb);
bb = nn2 > Number.MAX_VALUE
alert(bb);
}

il primo alert stampa il numero e la stringa con lo stesso valore
il secondo con IE6.0 stampa
1234567890123456700 <-- si e' mangiato le ultime due cifre
1234567890123456789

pensavo all'ennesimo bug di explo(d)er ed allora ho provato con Firefox 1.0
ed ho ottenuto
1234567890123456800 <-- le ultime tre cifre sono 800
1234567890123456789

purtroppo ho bisogno di gestire grandi numeri con Javascript cosa posso fare?

Aggiungo che il valore e' inferiore a Number.MAX_VALUE e che quindi mi
aspetterei di vederlo.

Dove sbaglio?


grazie,

alone in the javascript



Reply With Quote
  #2  
Old   
ZER0
 
Posts: n/a

Default Re: Problema con float di grandi dimensioni - 11-15-2004 , 02:25 AM






On Sun, 14 Nov 2004 17:13:37 GMT, programmer wrote:

Quote:
Salve,

ho un problema con i numeri float.
Allego un esempio,
[cut]
purtroppo ho bisogno di gestire grandi numeri con Javascript cosa posso fare?
Risolvere in altro modo.
I valori degli oggetti Number vengono gestiti in binario come double,
secondo lo standard IEEE 754.

Se ricordo bene, il massimo intero che puoi contenere senza perdita di
informazioni e' 2^53, ovvero 9007199254740992.

--
ZER0://coder.gfxer.web-designer/

~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)

on air ~ "Maki Kimura - Beyond The Bounds"


Reply With Quote
  #3  
Old   
programmer
 
Posts: n/a

Default Re: Problema con float di grandi dimensioni - 11-15-2004 , 02:57 AM



Quote:
Risolvere in altro modo.
Come? Hai qualche idea
La mia e' una applicazione finanziaria che fa calcoli lato client,
non posso spostare tutte le somme di una serie di numeri lato server.
L'applicazione diventerebbe lentissima se ogni volta che faccio una somma devo farla fare lato server
ad esempio ad Oracle.
Gestire le somme potrebbe essere semplice ma in caso di moltiplicazioni/divisioni c'e' da impiccarsi :-(

grazie mille,
non avevo per niente pensato al limite di 2^53.
Pero il massimo se non ricordo e' 1.7e304 e comniciare a perdere informazioni gia' con
numeri come 123456789012345678 e' abbastanza limitativo.
Pazienza

Quote:
Se ricordo bene, il massimo intero che puoi contenere senza perdita di
informazioni e' 2^53, ovvero 9007199254740992.
Se e' cosi' in effetti 9007199254740992 e' di molto inferiore al valore che
ho specificato.

"ZER0" <zer0.shock (AT) libero (DOT) it> ha scritto nel messaggio news:l9iq38p11or7.dlg (AT) ID-171124 (DOT) news.individual.net...
Quote:
On Sun, 14 Nov 2004 17:13:37 GMT, programmer wrote:

Salve,

ho un problema con i numeri float.
Allego un esempio,
[cut]
purtroppo ho bisogno di gestire grandi numeri con Javascript cosa posso fare?

Risolvere in altro modo.
I valori degli oggetti Number vengono gestiti in binario come double,
secondo lo standard IEEE 754.

Se ricordo bene, il massimo intero che puoi contenere senza perdita di
informazioni e' 2^53, ovvero 9007199254740992.

--
ZER0://coder.gfxer.web-designer/

~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)

on air ~ "Maki Kimura - Beyond The Bounds"



Reply With Quote
  #4  
Old   
ZER0
 
Posts: n/a

Default Re: Problema con float di grandi dimensioni - 11-15-2004 , 03:08 AM



On Mon, 15 Nov 2004 07:57:54 GMT, programmer wrote:

Quote:
Risolvere in altro modo.
Come? Hai qualche idea
Dipende tutto dal perche' devi fare una scelta del genere, ovvero dal
contesto dell'applicativo.
Il punto e' che JS non e' nato per fare calcoli di questo tipo.

Quote:
grazie mille,
non avevo per niente pensato al limite di 2^53.
Pero il massimo se non ricordo e' 1.7e304
Si, ma viene storato in un double. Quindi il numero intero massimo con il
quale non perdi informazioni e' 2^53esima. Se su google cerchi informazioni
circa lo standard IEEE 754 dovresti trovare tutto quel che ti serve.

Quote:
e comniciare a perdere informazioni gia' con
numeri come 123456789012345678 e' abbastanza limitativo.
Beh considera che tutta un illusione: il massimo numero allocabile in un PC
standard e' 2^32esima (2^64 con processori a 64bit).

Qualsiasi altro valore superiore a questa cifra, viene "simulato". Non e'
gestito dal processore, bensi' dal layer applicativo (l'engine di
javascript in questo caso; ma cosi' fa anche Oracle ovviamente.. altrimenti
non riusciresti a gestire un certo tipo di dati).

Quote:
Se ricordo bene, il massimo intero che puoi contenere senza perdita di
informazioni e' 2^53, ovvero 9007199254740992.

Se e' cosi' in effetti 9007199254740992 e' di molto inferiore al valore che
ho specificato.
Gia'.

--
ZER0://coder.gfxer.web-designer/

~ "Nella vita uno raccoglie ciņ che semina.
Ma per seminare bisogna chinarsi, e prenderlo nel culo un attimo."

on air ~ "Maki Kimura - Beyond The Bounds"


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.