Ich gebe ihm eine kurze Suche und einige Tests auch auf Skripte als gut geführt und ich fand die folgenden Ergebnisse, in Skriptformat ich es als Test,
<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>
und das Ergebnis war 23514624000
für beide x
und y
, aber in C# wie Sie versuchen, alle Integer zu multiplizieren und im Ergebnis eine ganze Zahl gebildet wird, aber wir wissen auch, dass int.MAX = 2147483647
die dann weniger als actuall Ergebnis ist, So im Ergebnis beim Zuweisen long x= a * b * c * d * ee * f * g * h * i * j * k * l * m;
schneidet es die ursprünglichen Werte ab, und in anderen re Sult ist es nicht, wenn Sie in beide gleiche Ergebnis möchten, können Sie folgenden Code verwenden,
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();
Jetzt werden Sie das gleiche Ergebnis dh
weil '' '' long'' und double' bekommen 'sind verschiedene Dinge –
Double und float __cannot__ eine beliebige Zahl mit 100% Genauigkeit halten, es sei denn, es ist eine Potenz von 2. Stattdessen halten sie nur __ approximations__ .. Deshalb haben wir Dezimal – TaW
Ich empfehle Überlaufprüfungen in Ihren Projekteinstellungen (um mindestens für den Debug-Build). – CodesInChaos