31311


Byte サイズから適切なサイズ名（KB、MBなど）を算出するコードの中で、  
`Math.log()` を使用しているものを見つけたのですが、これはどういう意味でしょうか。

[code]

    function formatBytes(fileSize) {
      const i = Math.floor(Math.log(fileSize) / Math.log(1024))
      return `${Math.round(fileSize / (1024 ** i))}${['Bytes', 'KB', 'MB', 'GB', 'TB'][i]}`
    }
    
[/code]

自然対数[^1](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/log)
にしている意味と、それを割ることで index が出せる理由がわかりません。


CC BY-SA 3.0
2016-12-22T04:34:32.563
31308
2016-12-22T05:02:58.297
425
question
javascript
自然対数の割り算の意味がわからない


ある数値ｘがあって`log(x)/log(1024)`することの意味はｘが１０２４の何乗かを求めていることになります。

累乗数と対数の関係が  
y = ax の時 x = loga y  
で  
この場合累乗数ｘは  
x = log1024 y で、  
底の変換をすると、（底はｅ（つまり自然対数）でも１０（常用対数）でもなんでも構いません）  
log1024 y = loge y / loge 1024  
となります。  
つまりファイルサイズが１０２４の何乗かを求めていることになります。  
それで、端数を切り捨てると  
ちょうど１０２４の０乗・１乗・２乗・・の整数の累乗数となって  
配列`['Bytes', 'KB', 'MB', 'GB', 'TB']`のインデックスとして使えます。


CC BY-SA 3.0
2016-12-22T05:02:58.297
31311
2016-12-22T05:02:58.297
5044
31308
answer