分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
1 B = 9.31322574615e-10 GiB
値を入力すると、バイトからギビバイトへの計算が入力に合わせてその場で進みます。1 B あたり 9.31322574615e-10 GiB.この比は測って求めたものではなく、定義で決まっています。計算はお使いの端末の中で行われ、入力した数字が通信に乗ることはありません。ただし、そのまわりのページのほうは、ほかのどのページとも同じように広告を読み込みます。
5000000 B is 0.004657 GiB
— スマートフォンで撮った写真 1 枚.
1024 B is 9.537e-7 GiB
— 1 キビバイト、ややこしさはここから始まる.
17180000000 B is 16 GiB
— 中級ノートパソコンのメモリー.
999700000000 B is 931 GiB
— 1 テラバイトのディスクを Windows が表示する数.
| B | GiB |
|---|---|
| 10000000 | 0.00931322574615 |
| 20000000 | 0.0186264514923 |
| 50000000 | 0.0465661287308 |
| 100000000 | 0.0931322574615 |
| 500000000 | 0.465661287308 |
| 1000000000 | 0.931322574615 |
| 5000000000 | 4.65661287308 |
| 10000000000 | 9.31322574615 |
B を GiB に変換
1 バイトは 8 ビットですが、いつもそう決まっていたわけではありません。初期の計算機は 6 ビット、7 ビット、9 ビットを使っていました。8 が勝ったのは、そこに 1 文字が収まり、しかもその数がきれいに半分ずつ割れるからです。
1 ギビバイトは 1,073,741,824 バイトで、ギガバイトより 7 % ほど大きい値です。Windows はギビバイトで測りながら、それを「GB」と表示します。「容量が足りない気がする」という疑問のからくりは、まるごとこれです。
こちら向きの計算は割り算で、しかも整数で割り切れます。1,073,741,824 単位が余りなく ギビバイト 1 つに収まります。不便なのは、結果が分数で出てくることだけです——3 分の 1、12 分の 1——逆向きなら得られる、きりのよい整数の代わりに。
それでも丸めで失われるものはありません。割り算が割り切れるからです。結果が小数で収まらない場合——0.0833… のような——それは分数が顔を出しているのであって、誤差が入り込んでいるのではありません。
GiB 1 つはひとつ下の単位の 1,024 倍で、GB 1 つは 1,000 倍です。このページでは 1073741824 B と 1000000000 B の差——7.4 %——になり、段を上がるごとにこの隔たりは開いていきます。写真 1 枚では丸め誤差でしかないものが、ハードディスクでは目に見える割合になるのはそのためです。
「容量が消えた」という話の中身は、これだけです。GB で売られたディスクには、書いてあるとおりのバイト数が入っています。それを 1,000 ではなく 1,024 で割り、名前は GB のまま表示しているのが Windows です。macOS は 10.6 以降ディスクの容量を十進の単位で数えているので、同じディスクが 2 台のパソコンで違う大きさに見えることがあります。減ったものはなく、丸めているのでもありません。同じバイト数に、名前が 2 つあるだけです。
ソフトウェアがサイズをバイトで報告するのは意図的なことです。バイト数には解釈すべき接頭辞も、巻き戻すべき丸めも、ロケールもありません。だからこそメトリクスやログ、API のレスポンスを、Gという文字を何倍と読むか誰も合意しないまま比較できます。この性質こそが、その数字を読みにくくしている原因でもあります。17,179,869,184 という数字は、何かで割るまで何も伝えてくれません。
割る数は、周囲のシステムが 2 進法なのかによって決まります。メモリー、ページキャッシュ、ファイルシステムの使用量など OS 系のカウンターはほぼすべて 2 進法なので、1,073,741,824 で割ります。これはちょうど 16 GiB です。10 億で割ってしまうと 17.18 になり、元の数字がきれいな 2 のべき乗だったという、いちばん有益な手がかりを隠してしまいます。
何かを計算する前に、まず桁数を数えてください。10 桁なら 0.93 から 9.3 GiB の間、11 桁なら 9.3 から 93 の間、12 桁なら 93 から 931 の間、13 桁ならおよそ 1 テビバイトです。この一瞥だけで、あるキャッシュがメガバイト級なのかギガバイト級なのか、ログに書かれた転送量がもっともらしい数字かどうかがわかります。
この習慣が役立つのは、異なる規模が混在する出力を見るときです。1 つのメトリクスエンドポイントが十数個のバイトカウンターを返すと、数千のものと数十億のものが混ざります。目で桁数を数えるほうが、値を解析するより速く並べ替えられます。結局意味のある数字だけを変換するほうが、すべてを変換するよりずっと速く済みます。
見た瞬間にわかる価値がある数字があります。1,073,741,824 は 1 ギビバイト、2,147,483,648 はその 2 倍、4,294,967,296 は 4 倍、8,589,934,592 は 8 倍、17,179,869,184 は 16 倍です。出力の中にこれらが現れたら、それはたいてい測定値ではなく容量や上限で、測定値がきれいな 2 のべき乗にぴったり乗ることはめったにないからです。
逆もまた有用です。末尾に長くゼロが続くバイト数——1,000,000,000 や 50,000,000,000 のような——は、人が入力したか 10 進法の数字から生成されたもので、ハードウェアが自然に扱う値とは一致しません。設定のダンプの中にこれを見つけると、なぜ上限が本来合わせたかった境界のすこし手前にあるのかがわかることがよくあります。
すべての数値を倍精度浮動小数点数として扱う言語では、整数は 9,007,199,254,740,991——2⁵³ 引く 1、バイトに直すとおよそ 8 PiB——まで正確に保たれます。この上限より下ならバイト数を安全に保持し、比較し、加算できます。上限を超えると値は静かに丸められ、本来は違う 2 つのサイズがエラーもなく等しいと比較されることがあります。
ほとんどのシステムはここまで到達しませんが、到達するとしたら個々のオブジェクトではなく合計の場面です。フリート全体の総量、通算の転送量カウンター、大きなテーブルの合計などです。防御策は、シリアライズの境界をまたぐバイト数を 64 ビット整数か文字列で保持することと、数値が浮動小数点数に広げられてしまう層を通過させたあとではなく、その幅を持つ型が住んでいる場所で集計を行うことです。
多くのユーティリティには、人が読みやすい表示を抑えるモードがあり、出力が画面以外のどこかへ渡るなら使う価値があります。ディスク使用量ツールはブロックサイズを 1 に指定でき、ファイルのメタデータ照会は正確な長さを表示でき、オブジェクトストレージの API は当然のようにバイト単位のコンテンツ長を返します。これらはどれも、整形された 1.4 GiB とは違い、情報を失いません。
その損失は後から取り戻せません。1.4 GiB と表示された数字は、実際には 1,449,551,462 から 1,556,925,644 バイトのどこかにあり、その幅は 100 MB を超えます。どれだけ掛け算しても幅は狭まりません。整形された出力を後から読み取って変換し直すパイプラインは、その不確実性を毎回下流の数字に組み込んでいることになり、そのずれが表面化するのは、そうした 2 本のパイプラインを比較したときだけです。
ほとんどの議論を避けられるルールは、測定対象のシステムが数えている単位で表示することです。メモリーやページキャッシュ、ファイルシステムの使用量、バッファープールは 2 進法なので、それらのグラフは GiB で表示してください。オブジェクトストレージの合計や送信データ量、請求書に載るものは 10 進法なので、それらは GB で表示してください。画面に出す前にどちらかへ変換する手順を挟むと、見ている人がどちらを見ているのか見失う場所が増えるだけです。
どちらを選んだとしても、軸のラベルにはどちらであるかを明記してください。2³⁰ で割った値をプロットしながら軸ラベルが GB になっているメモリーグラフは、Windows が行っている誤表記と同じことを、いずれ請求書の 10 進法の数字と比較される場所で再現しているだけです。ラベルに 1 文字加えるだけで、この種の混乱をまるごと防げます。
1 B は 9.31322574615e-10 GiB.画面に出しているのは有効数字 12 桁までです。バイトとギビバイトの比そのものは定義によって決まっている厳密な値で、丸めが入るのは表示のところだけです。
いいえ。計算はブラウザーの中で行われます。通信を切ったままでも計算は続けられますし、それがいちばん手軽な確かめ方でもあります。
同じ名前の単位が 2 つ動いているからです。メーカーは 1 GB を 1,000,000,000 バイト(10 億バイト)として数えます。一方 Windows が表示しているのはギビバイト、つまり 1,073,741,824 バイトで、それを「GB」と呼んでいます。同じディスクが 7 パーセントほど小さく見えるのはこのためです。消えたものは何もありません。
1GiBは1073740000Bです。同じ関係を逆から読んだだけなので、一方のページの答えをもう一方に通せば、必ず元の値に戻ります。
このページがデータ量の単位について述べていることは検証できます。根拠となる資料は次のとおりです。
係数はページ内の定数で、計算は四則演算だけです。だからどこにも送信されませんし、送信する必要もありません。入力した数値はブラウザーから出ません。運ぶためのリクエストが存在しないからです。