私はbigintライブラリが必要か、通常のjs番号で十分かどうかを判断しようとしています。私は、チャンクのサイズをビット単位で100GBに分割して、チャンクの数を取得したい:。私はjsが正確な分割に問題があることを覚えています。Javascript bigint division
結果にx = Math.ceil(x.0)
の代わりにx+1 = Math.ceil(x.00000000000..01)
が得られる可能性はありますか?
私はbigintライブラリが必要か、通常のjs番号で十分かどうかを判断しようとしています。私は、チャンクのサイズをビット単位で100GBに分割して、チャンクの数を取得したい:。私はjsが正確な分割に問題があることを覚えています。Javascript bigint division
結果にx = Math.ceil(x.0)
の代わりにx+1 = Math.ceil(x.00000000000..01)
が得られる可能性はありますか?
私は試してみることに決めました。通常のjs数の精度は、3〜4PBのファイルサイズでは不十分です。だからFirefoxのjsの整数は約55ビットの精度を持っています。私はこれがブラウザによって異なるかもしれないと思うが、私はnodejsのためにこれを必要とする。
console.log("start");
var B = 8;
var KB = 1024*B;
var MB = 1024*KB;
var GB = 1024*MB;
var TB = 1024*GB;
var PB = 1024*TB;
var EB = 1024*PB;
var maxBits = 4 * PB;
var bitSteps = 100 * TB;
var maxChunkSize = 333 * B;
for (var bits = 0; bits <= maxBits; bits += bitSteps)
for (var chunkSize = 1; chunkSize <= maxChunkSize; ++chunkSize) {
var calculatedChunkCount = Math.ceil(bits/chunkSize);
var calculatedBits = calculatedChunkCount * chunkSize;
var difference = calculatedBits - bits;
var error = difference>= chunkSize || difference<0;
if (error)
console.log({
chunkSize: chunkSize,
calculatedChunkCount: calculatedChunkCount,
bits: bits,
calculatedBits: calculatedBits,
difference: difference
});
}
console.log("end");
出力:
{ chunkSize: 97, calculatedChunkCount: 290180388361501, bits: 28147497671065600, calculatedBits: 28147497671065596, difference: -4 }
{ chunkSize: 1579, calculatedChunkCount: 20611490932343, bits: 32545544182169600, calculatedBits: 32545544182169596, difference: -4 }
私は念のために夜のために並列nodejsスクリプトを起動しますが、私は精度が0で十分だと思い - 100ギガバイトの範囲。
別の回答によると:https://stackoverflow.com/a/2803010/607033 js整数は53ビットまで正確です。したがって、この分割限度はその値に近いかもしれません。
あなたの値が「2.5」である場合、おそらく精度が緩くなります。 –
@JonasW。 'ceil'の結果は同じになるので、2.5では重要ではありません。 – inf3rno