2016-04-01 10 views
2

何か:CであるためJavascript uint32数学は機能しませんか? UINT32数学との奇妙な

a = new Uint32Array([1103515245, 1103527590, 0]); 
a[2] = a[0] * a[1]; 
console.log(a[2]); 

が、私は考えて間違っている、2524872960を与える:

#include <stdio.h> 

int main() { 
    unsigned a[3] = { 1103515245, 1103527590, 0 }; 
    a[2] = a[0] * a[1]; 
    printf("%u\n", a[2]); 
    return 0; 
} 

は2524872878を与えます(ので、Windowsの電卓はありません)

だから何ですそれと一緒に?私はFirefoxを使用しています。45.0.1

EDIT:これが予想される場合は、どうすれば "C"の結果を複製できますか?

答えて

4

JSには整数型がないためです。したがって、*は、64ビットの浮動小数点数での乗算を行います。あなたは、整数乗算を行いたい場合は、

/* Exact math */ 1103515245 × 1103527590 = 1217759518843109550 
/* JavaScript */ 1103515245 * 1103527590 === 1217759518843109600 
       Number.MAX_SAFE_INTEGER === 0009007199254740991 

Math.imulを使用します:しかし、これらの結果のための十分な精度を持っていない

Math.imul()関数はCのような32ビットの結果を返します。 2つのパラメータの乗算。

a[2] = Math.imul(a[0], a[1]); // -1770094418 
a[2];       // 2524872878 
+0

ありがとうございます。 – user9645

関連する問題