dò una breve ricerca ed eseguire alcuni test anche su script come bene e ho trovato i seguenti risultati, in formato script provo come,
<script>
var a = 5;
var b = 5;
var c = 7;
var d = 6;
var ee = 6;
var f = 8;
var g = 9;
var h = 6;
var i = 6;
var j = 4;
var k = 8;
var l = 9;
var m = 5;
var x = a * b * c * d * ee * f * g * h * i * j * k * l * m;
var y = eval(a * b * c * d * ee * f * g * h * i * j * k * l * m);
document.writeln("RESULT X : " + x);
document.write("<br>");
document.writeln("RESULT Y : " + y);
</script>
e il risultato è stato 23514624000
sia per x
sia per , ma in C# come si tenta di moltiplicare tutti gli interi e nel risultato si forma un intero ma sappiamo anche che int.MAX = 2147483647
che è minore del risultato actuall, Quindi in risultato quando si assegna a long x= a * b * c * d * ee * f * g * h * i * j * k * l * m;
tronca i valori originali, e in altri re Sult non lo è, se si desidera che lo stesso risultato in entrambi è possibile utilizzare codice seguente,
int a = 5;
int b = 5;
int c = 7;
int d = 6;
int ee = 6;
int f = 8;
int g = 9;
int h = 6;
int i = 6;
int j = 4;
int k = 8;
int l = 9;
int m = 5;
long x = (long)a * b * c * d * ee * f * g * h * i * j * k * l * m;
double aa = 5;
double ab = 5;
double ac = 7;
double ad = 6;
double aee = 6;
double af = 8;
double ag = 9;
double ah = 6;
double ai = 6;
double aj = 4;
double ak = 8;
double al = 9;
double am = 5;
long y = (long)(aa * ab * ac * ad * aee * af * ag * ah * ai * aj * ak * al * am);
Console.WriteLine(x);
Console.WriteLine(y);
Console.ReadKey();
Ora si otterrà lo stesso risultato cioè
fonte
2015-01-12 12:48:07
perché '' long'' e '' double' 'sono cose diverse –
Double e float __cannot__ contengono un numero qualsiasi con precisione del 100%, a meno che non sia una potenza di 2. Invece tengono solo __approximations__ .. Per questo motivo abbiamo il decimale – TaW
Ti consiglio di abilitare i controlli di overflow nelle impostazioni del progetto (a almeno per la build di debug). – CodesInChaos