電卓・進数変換・BMI — 計算系ツールの使い分け

電卓と計算用紙 Photo: Unsplash

「電卓」「進数変換」「BMI」——一見バラバラに見えますが、この 3 つはどれも「数値を別の形に直してから判断する」という共通点を持った計算系ツールです。日常の買い物で税込を出すのも、CSS のカラーコードを調整するのも、健康診断の結果票を眺めるのも、結局のところ「手元の数字を別の表現に変換して意味を掴む」という作業の繰り返し。本記事では、ベンリーに揃っている 電卓・進数変換・BMI 計算の 3 ツールを軸に、それぞれの背景知識と実務での使いどころをまとめて整理します。浮動小数点誤差の罠、16 進と 2 進の橋渡し、ビット演算でのフラグ管理、そして BMI という指標の「本来の意味」まで、読み終わるころには数字と friendlier な関係になっているはずです。

BMI はベルギーの統計学者が作った指標

今や世界中で使われている BMI ですが、もともとは医学指標ではありません。ベルギーの統計学者・天文学者である Adolphe Quetelet(アドルフ・ケトレー)が 1832 年前後に提案したもので、当時の名前は「ケトレー指数(Quetelet Index)」。集団としての肥満度分布を観察するために考案された、いわば 人口統計用のツールだったのです。個人の健康判定に使うつもりでは最初からなかった、というのが歴史的事実です。これが医学の世界に持ち込まれたのは 140 年後の 1972 年、アメリカの生理学者 Ancel Keys(アンセル・キーズ)が論文の中で "Body Mass Index" と呼び直したのがきっかけでした。Keys 自身は「BMI は集団調査に使うには優れているが、個人の肥満診断には向かない」と論文で釘を刺していた——という事実は、あまり知られていません。現在の「BMI 25 以上は肥満」「22 が理想」といった個人判定ルールは、20 世紀後半の疫学研究が積み重なった結果として後付けで整理されたものです。

電卓の基本

電卓と言うと「足し算引き算ができるだけのツール」と思われがちですが、実際には業務の現場で一番使う頻度が高い計算補助であり、正しく使いこなせるかどうかで作業速度がかなり変わります。まずは基本の四則演算から押さえていきましょう。

四則演算はいわずと知れた加減乗除です。ただし多くのデスク電卓は「左から順に計算する」いわゆる算術式で動き、パソコン上のソフト電卓や関数電卓は「数学の優先順位(乗除 → 加減)」で動きます。同じ 2 + 3 × 4 を打ち込んでも、前者は (2 + 3) × 4 = 20、後者は 2 + 12 = 14 と答えが違う、という罠があります。経理用電卓の結果をプログラマが再現できなくて首を傾げるのは、この挙動の差が原因です。ベンリーの 電卓ツールは数学の優先順位に従う実装なので、複雑な式も一気に書き下せます。

次はパーセント計算。税込価格を出すときの「定価 × 1.1」は誰でもできますが、逆方向——税込価格から税抜を求めるときに「× 0.9」と書くと誤差が出ます。正しくは「÷ 1.1」。税率が 10% なら 1100 円の税抜は 1100 / 1.1 = 1000 円が正解で、1100 × 0.9 = 990 ではありません。割引計算も同様で、「30% オフ」は「× 0.7」、値引き後価格から元値を逆算するときは「÷ 0.7」です。掛ける/割るの向きを間違えないようにだけ注意してください。

もう一つ見落とされがちな機能がメモリキー(M+M-MRMC)です。M+ は現在の表示値をメモリに足し、M- は引き、MR(Memory Recall)でメモリの内容を呼び出し、MC(Memory Clear)でリセット、というシンプルな仕組みなのですが、これを使いこなすと「複数の計算結果を足し合わせる」業務がとてもスムーズになります。たとえば領収書 5 枚の金額を順に打ち込んで M+ で足し込み、最後に MR で合計を確認する、という使い方です。

端数処理もビジネスの世界では頻出テーマです。一般に「四捨五入」「切り上げ」「切り捨て」の 3 種類があり、消費税計算では事業者ごとに方針が分かれます。1 円未満の端数を切り捨てるのか、四捨五入するのか、あるいは「税総額から逆算する」のか——これらは法律で一本に決まっているわけではなく、請求書や領収書の運用方針次第で変わります。電卓を使うときは「どの単位でどう丸めるか」を自分の中でルール化しておきましょう。

科学計算(三角関数・対数・累乗)

関数電卓モードに入ると、四則演算に加えて 三角関数、逆三角関数、対数、指数、累乗、ルートなどの科学計算系が使えるようになります。高校数学を触った頃以来、という人も多いと思いますが、実務でも測量、DIY の木材カット、ゲームプログラミング、機械学習の理論など、意外にあちこちで出番があります。

三角関数(sincostan)は、直角三角形の辺の比を角度の関数として表したものです。屋根の傾斜角度から水平距離を出す、ディスプレイの視野角を計算する、ロボットアームの先端位置を決める、といった場面で登場します。入力を度(degree)で扱うかラジアン(radian)で扱うかを、最初に必ず確認しておきましょう。多くの関数電卓には DEG / RAD / GRAD の 3 つのモードがあり、ボタンひとつで切り替えられる代わりに、間違ったモードで計算するとまったく違う答えが返ってくるので、結果の桁が想定と違うときはまずモードを疑うのが鉄則です。

逆三角関数(asinacosatan)は、辺の比から角度を逆算する関数です。坂道の写真を定規で測って「水平 100 cm、垂直 15 cm」だった場合、傾斜角は atan(15 / 100) ≒ 8.53° と求まります。地図で出てくる「8 度の坂」というのは、このタイプの逆算で導かれた数字です。

対数(logln)は、常用対数(底 10)自然対数(底 e ≒ 2.718)の 2 種類があり、どちらを使うかは分野ごとに流派があります。音の大きさのデシベル、地震のマグニチュード、pH、星の等級——これらは全部、人間の感覚に合わせて対数スケールで測られている指標です。「10 倍違うと 10 dB 大きい」「マグニチュード 1 違うとエネルギーは 32 倍」といった変換は全部対数の世界で行われます。一方、微分方程式や確率論で自然発生する e は自然対数の底で、連続複利計算や減衰曲線を扱うときに現れます。

累乗(x^y)とルート()は対になっています。2^10 = 1024√2 ≒ 1.414212^0.5 = √22^-1 = 0.5 のように、指数が整数でも小数でも負の数でも扱えるのが累乗の強みです。3 乗根や 4 乗根のようなマイナーな演算も、多くの関数電卓では y√x ボタンで直接計算できます。

これらの関数は紙に書き下すと難しそうに見えますが、電卓に任せてしまえば数秒で済む話です。ベンリーの電卓ツールでも sincostanloglnx^y を使えるので、複雑な式もコピー&ペーストでそのまま貼れるのが便利なところです。

浮動小数点の誤差

プログラマなら一度は出会う「お馴染みの裏切り」が、浮動小数点演算の誤差です。たとえば JavaScript の Node.js コンソールでこう打ち込むと、

console.log(0.1 + 0.2); // → 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // → false

期待どおり 0.3 にはなってくれません。これは JavaScript が悪いわけでも電卓が壊れているわけでもなく、ほとんどのプログラミング言語が使っている IEEE 754 倍精度浮動小数点数という 2 進数ベースの数値表現に根本的な原因があります。10 進数の 0.1 は 2 進数で書こうとすると 0.00011001100110011… と循環してしまい、有限の 64 ビットに収められないからです。

IEEE 754 倍精度は、符号 1 ビット・指数部 11 ビット・仮数部 52 ビットという構成で、約 15〜17 桁の 10 進有効精度を持ちます。整数なら 2^53 = 9,007,199,254,740,992 までは誤差なく表現できますが、小数になるとほとんどの値が「ぴったり表せない近似値」として格納されます。0.1 + 0.2 の結果がわずかに 0.3 より大きくなるのは、それぞれの近似誤差が加算で積み重なった結果なのです。

この誤差を回避するにはいくつかの定石があります。1 つ目は「比較するときに許容誤差で判定する」方法で、JavaScript なら Number.EPSILON(約 2.22 × 10^-16)を使います。

// 等値比較ではなく、誤差許容で比較する
if (Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON) {
  console.log('実質的に等しい');
}

2 つ目の定石は、金額計算は整数(最小単位)で扱うというルールです。たとえば日本円なら「円」を最小単位として整数で持ち、1000 円は 1000、税込計算のときだけ一時的に × 1.1 してから整数に丸める、という運用にします。ドル・セントの世界なら「セント」、ビットコインなら「サトシ」と、その通貨が扱える最小単位で整数化するのが鉄則です。銀行系のシステムが BigDecimal(Java)、Decimal(Python)のような任意精度 10 進数ライブラリを使うのも、この誤差の影響を根絶するためです。

3 つ目は 出力時に丸めること。画面表示や CSV 出力では toFixed(2) のように小数 2 桁に丸めて見せ、内部の計算結果は誤差付きのまま保持する、という使い分けです。「計算は精度を保ち、見せるときだけ丸める」と覚えておけばだいたい正しい運用になります。

ちなみにベンリーの 電卓ツールは計算結果を表示用に適切な桁数で丸めているので、通常の買い物や業務での使用であれば誤差を意識する必要はありません。ただし「コードの中で使う」「Excel にそのまま貼る」といった場面では、この性質を頭の隅に置いておいてください。

2 進・8 進・16 進の世界

ここから先は少しコンピュータサイエンス寄りの話題です。私たちが日常使っている 10 進数(decimal、base 10)は、「0〜9 の 10 種類の数字で桁が上がる」という仕組みですが、コンピュータの世界では 2 進数(binary、base 2)、8 進数(octal、base 8)、16 進数(hexadecimal、base 16)の 3 つがよく登場します。それぞれに独自の役割があるので、ざっくり押さえておきましょう。

2 進数01 の 2 種類の数字だけで全てを表します。コンピュータの内部ではトランジスタの ON / OFF、つまり電気信号の「電圧あり / なし」で情報を扱っているので、2 進数がそのままハードウェアの自然な言語になります。1 バイト = 8 ビット、つまり 00000000〜11111111 の 8 桁の 2 進数で 256 通り(2^8 = 256)の値を表せます。画像の 1 ピクセルの RGB 各チャンネル、ASCII 文字コード、ネットワークの 1 オクテット——全部この 1 バイト単位が基礎です。

16 進数は 2 進数を「人間が読みやすくまとめた形」です。0〜9 に加えて A〜F(= 10〜15)を使い、1 桁で 0〜15 の値を表します。重要なポイントは、1 桁の 16 進数がちょうど 4 ビットの 2 進数に対応すること。だから 8 ビット = 2 桁の 16 進数というきれいな対応関係が成立し、1 バイト = 16 進 2 桁2 バイト = 16 進 4 桁と桁数を計算するのが楽になります。メモリダンプ、ネットワークパケット、ファイルのバイナリ表示、CSS のカラーコード(#RRGGBB)——ほぼ全てのバイナリ系表示で 16 進数が採用されているのは、この「読みやすさ」のためです。

8 進数0〜7 の 8 種類の数字で、1 桁が 3 ビットに対応します。今では出番が減りましたが、UNIX 系のファイルパーミッション表示(chmod 755 のような書き方)では現役です。rwxrwxrwx の 9 ビットを 3 ビットずつ区切って、それぞれを 8 進 1 桁で表現するのが 8 進法採用の理由です。

10 進2 進8 進16 進
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010

この表を眺めるだけでも、「16 進数がなぜ 1 桁で 4 ビットちょうど分を表せるのか」「8 進数がなぜ 1 桁 3 ビットなのか」が見えてくるはずです。2^4 = 162^3 = 8、という基礎からくる必然です。

進数変換の方法

進数変換は「割り算とあまり」で機械的にできます。10 進 → 2 進なら、元の数を 2 で割り続けて余りを下から並べるだけ。例として 13 を 2 進に直してみます。

13 ÷ 2 = 6 ... 余り 1
 6 ÷ 2 = 3 ... 余り 0
 3 ÷ 2 = 1 ... 余り 1
 1 ÷ 2 = 0 ... 余り 1

下から読んで → 1101 (2 進)

同じ要領で 10 進 → 8 進は 8 で、10 進 → 16 進は 16 で割り続ければ OK。10 進 157 を 16 進に直すと 157 ÷ 16 = 9 余り 139 ÷ 16 = 0 余り 9、下から読んで 9D(13 = D)となります。

逆方向、2 進 → 10 進は「各桁に重みを掛けて足す」方式です。2 進 1101 なら 1×8 + 1×4 + 0×2 + 1×1 = 13。桁の重みは右端から 1, 2, 4, 8, 16, 32, … と 2 の冪で増えていきます。16 進 9D を 10 進に戻すなら 9×16 + 13×1 = 144 + 13 = 157 です。

一番便利なのは 2 進 → 16 進の変換で、これは計算すら不要です。2 進数を右から 4 ビットずつ区切って、各ブロックを 16 進 1 桁に直すだけ。2 進 11010110 を 4 ビットで区切ると 1101 | 0110、それぞれ D6 なので、16 進では D6。逆に 16 進 FF を 2 進に直すなら、各桁を 4 ビットで書いて 1111 1111 と並べるだけ。人間が 2 進数の長い羅列を扱うときに、常に 16 進を経由する理由がここにあります。

現代のプログラミング言語の多くは、ソースコードの中で進数リテラルを直接書けます。JavaScript を例にすると:

// 10 進リテラル
const a = 10;

// 2 進リテラル (0b プレフィックス)
const b = 0b1010;   // → 10

// 8 進リテラル (0o プレフィックス)
const c = 0o17;     // → 15

// 16 進リテラル (0x プレフィックス)
const d = 0xFF;     // → 255

// 表示時に変換
(255).toString(2);  // → "11111111"
(255).toString(16); // → "ff"
parseInt('FF', 16); // → 255

Python や Rust、Go、C、C++ もほぼ同じ 0b / 0o / 0x のプレフィックス体系を採用しているので、一度覚えれば多言語で使い回せます。ベンリーの 進数変換ツールに数値を入れると、2 進・8 進・10 進・16 進の 4 つを同時に表示してくれるので、コードを書く前の下調べに重宝します。

ビット演算の基礎

2 進数を手になじませたら、次は ビット演算に踏み込みましょう。ビット演算は「整数を 2 進数に分解して、ビット単位で論理操作を行う」演算の総称で、ANDORXORNOTSHIFT の 5 種類がよく使われます。

AND(&は「両方のビットが 1 のときだけ 1」。0b1100 & 0b1010 = 0b1000 という具合で、特定のビットを抽出する「マスク」の用途で使います。たとえば RGB 色値から赤成分だけ取り出したいなら、0xFF8000 & 0xFF0000 = 0xFF0000 で赤チャンネルだけが残ります。

OR(|は「どちらかが 1 なら 1」。フラグをセットする用途に使います。flags | 0b0010 で 2 番目のビットを 1 に立てる、という書き方です。

XOR(^、排他的論理和)は「片方だけ 1 のときに 1」。同じ値で XOR すると 0 になる性質があり、暗号処理、ハッシュ、画像の差分計算、そして「トグル」に使われます。flags ^ 0b0010 と書けば、2 番目のビットが ON ならば OFF に、OFF なら ON に反転します。

NOT(~は「ビットを反転する」単項演算子で、~0b1010 = …11110101(ビット幅に依存)となります。符号付き整数で使うときはビット幅と 2 の補数表現を意識する必要があるので、初心者殺しの罠が潜む演算子でもあります。

SHIFT(<<>>は「ビット列を左右にずらす」演算。x << 1 は 2 倍、x >> 1 は 2 分の 1 に相当します。1 << 10 = 10241 << 20 = 約 100 万、といった具合に、2 の冪を一気に計算するときに便利です。

ビット演算の古典的な応用例が UNIX のファイルパーミッションです。rwx(読み・書き・実行)の 3 ビットを、所有者・グループ・その他の 3 ユーザー区分ごとに持つので、合計 9 ビット。これを 8 進 3 桁で表したのが「chmod 755」のような表記です。

rwx rwx rwx  ← 所有者/グループ/その他
111 101 101  ← 2 進表現
 7   5   5   ← 8 進表現 (chmod 755)

所有者: rwx = 4+2+1 = 7
グループ: r-x = 4+0+1 = 5
その他:   r-x = 4+0+1 = 5

この仕組みが分かると、chmod 644(所有者は読み書き、他は読み取りのみ)や chmod 777(全員が全権限)といった表記が直感的に読めるようになります。644 を 2 進に直すと 110 100 100、「rw- r-- r--」と確認できますね。

もう一つの応用例が フラグ管理です。たくさんの真偽値を 1 つの整数にまとめて持つテクニックで、OPEN = 0b0001READ = 0b0010WRITE = 0b0100APPEND = 0b1000 のように定義しておき、OPEN | READ | WRITE で「読み書き兼用でオープン」を表現する、というパターンです。Linux の open(2) システムコールの O_RDWR | O_CREAT のような書き方は、まさにこの流儀です。

進数変換で色コード操作

Web 開発者にとって進数変換がもっとも身近に感じられる場面が、CSS のカラーコードです。#FF8000 のような「#」で始まる 6 桁の 16 進数は、実は 赤・緑・青の各チャンネルを 2 桁ずつの 16 進で並べたもの。FF(= 255、最大)+ 80(= 128、中間)+ 00(= 0、最小)で、赤がフル・緑が半分・青がゼロ、つまりビビッドなオレンジです。

各チャンネルは 1 バイト(8 ビット、0〜255 の 256 段階)で表現され、3 チャンネル合わせて 3 バイト = 24 ビットで 1 色を表します。これで 256 × 256 × 256 = 16,777,216 色、いわゆる「約 1677 万色」の世界が作れるわけです。人間の目が区別できる色数がだいたいこのくらいと言われており、24 ビットカラーが長らくデジタル表現の標準になってきた理由でもあります。

CSS では短縮記法として #F80 のような 3 桁表記も使えます。これは「各桁を 2 回繰り返す」展開ルールで、#F80 = #FF8800 と等価です。さらに最近は アルファチャンネル(透明度)を追加した 8 桁表記も広く使われるようになりました。#FF800080 と書けば「オレンジで透明度 50%」を意味します(80 = 128 / 255 ≒ 50%)。

プログラムから RGB 各チャンネルを組み合わせて 24 ビット整数を作るときは、ビットシフトと OR を使います。

// RGB → 24 ビット整数
const r = 255, g = 128, b = 0;
const color = (r << 16) | (g << 8) | b;
console.log(color.toString(16)); // → "ff8000"

// 逆方向: 24 ビット整数 → RGB
const hex = 0xff8000;
const R = (hex >> 16) & 0xff; // → 255
const G = (hex >> 8)  & 0xff; // → 128
const B =  hex        & 0xff; // → 0

ビット演算とシフトを使うと、分岐や配列を使わなくても色のバラし/合体が数式一本で書けます。昔のゲームプログラミングではメモリと CPU の節約のためにこの書き方が定番でしたし、今でもシェーダや画像処理ライブラリの中身を読むと似たテクニックが頻出します。

ベンリーには カラーピッカーカラーコード変換ツールもあるので、RGB と HEX と HSL の相互変換はそちらを使うのが最速です。ただし「その変換の中身がどう動いているか」を理解しておくと、デザイナとエンジニアの会話がぐっとスムーズになります。

BMI とは何か

ここからは体系を切り替えて、健康管理の定番指標 BMI(Body Mass Index、体格指数)の話に入ります。BMI は身長と体重から「その人の体重が身長に対して適正かどうか」を 1 つの数字で表すための指標で、定義式は非常にシンプルです。

BMI = 体重(kg) / 身長(m)²

// 例: 身長 170 cm、体重 65 kg の場合
BMI = 65 / (1.70 × 1.70)
    = 65 / 2.89
    ≒ 22.5

身長を m 単位(170 cm なら 1.70)で入れるのが最大の注意点で、cm のまま計算するとまったく違う値(約 0.00225)になります。身長を 2 乗することで、身長の違いによる体重の「当然の差」をならして、異なる身長の人たちを横並びで比較できるようにしているのがこの指標の肝です。

日本肥満学会の基準では、BMI の値を次のように区分しています。

BMI判定(日本肥満学会)
18.5 未満低体重(やせ)
18.5 〜 25 未満普通体重
25 〜 30 未満肥満(1 度)
30 〜 35 未満肥満(2 度)
35 〜 40 未満肥満(3 度)
40 以上肥満(4 度)

WHO の国際基準は「BMI 30 以上を肥満(obese)、25〜30 を過体重(overweight)」と定めているので、日本の基準のほうが厳しい(25 からすでに肥満)ことになります。アジア人は同じ BMI でも欧米人より内臓脂肪が付きやすく、糖尿病・高血圧などの生活習慣病リスクが早く上昇する、という疫学的知見を反映した結果です。

BMI 22 が「もっとも病気になりにくい値」とされているのは、1991 年に東京大学の松澤佑次らが日本人約 5000 人を対象に行った調査に基づいています。さまざまな BMI の人を追跡して疾患発症率を集計した結果、BMI 22 付近がもっとも有病率が低かったため、ここが「理想値」として定着しました。この値を使って算出するのが 標準体重です。

標準体重 = 身長(m)² × 22

// 身長 170 cm の場合
標準体重 = 1.70 × 1.70 × 22
        = 2.89 × 22
        ≒ 63.6 kg

身長が分かれば標準体重が出せて、BMI の計算と一緒に使えば「あと何 kg 減らせば標準体重に届くか」もすぐ分かる、というわけです。ベンリーの BMI 計算ツールは身長と体重を入れるだけで BMI・判定区分・標準体重まで一度に出してくれるので、健康診断の結果票と一緒に眺めるのに便利です。

BMI の限界

BMI は非常に便利な指標ですが、万能ではありません。むしろ「その限界を知らずに使うと、健康な人を不健康と判定してしまう」という副作用があることは、正直に押さえておくべきです。代表的な弱点を整理します。

1. 筋肉量と脂肪量を区別しない。BMI は「体重 ÷ 身長の 2 乗」というシンプルな式なので、筋肉で体重が重い人も、脂肪で重い人も、同じ数字になります。ラグビー選手やボディビルダーは BMI で見るとほぼ全員が「肥満」に分類されますが、体脂肪率は一桁台という人がほとんど。逆に運動不足で脂肪だけが増えた「隠れ肥満」タイプは、BMI が正常範囲でも体脂肪率が高い、ということが起こります。

2. 身長だけで一律に判定する。BMI は身長の 2 乗で割るので、非常に背が高い人や低い人では、同じ BMI でも「体積あたりの体重」の解釈がずれやすくなります。とくに成人でも身長 150 cm 以下の人、195 cm 以上の人では、22 が最適値というルールがそのまま当てはまらない可能性が指摘されています。

3. 人種・地域差。前述のとおり、WHO 基準では BMI 30 以上が肥満ですが、日本・中国・インドなどアジア諸国では、より低い BMI でも糖尿病・高血圧リスクが上がることが分かっており、国ごとにカットオフ値を調整しています。全人類共通のモノサシとして使うには、元々無理があるのです。

4. 脂肪の「つき方」が見えない。同じ体脂肪率でも、内臓脂肪(腹腔内に溜まるタイプ)と皮下脂肪(皮膚のすぐ下)では、生活習慣病リスクが大きく違います。内臓脂肪が多いと糖尿病・心筋梗塞・脂肪肝などのリスクが跳ね上がりますが、BMI だけでは内臓/皮下の比率は分かりません。健康診断で BMI と一緒に「腹囲」を測るのは、内臓脂肪の目安を得るためで、メタボリックシンドロームの診断基準は 男性 85 cm、女性 90 cmを超えると要注意、となっています。

BMI を過信しない、でも無視もしない

BMI は「1 つの指標」であって、健康の全てを表す万能スコアではありません。アスリートのように筋肉量が多い人が「肥満判定」を受けたからといって、それが病気のリスクを示しているわけではないのです。逆に、BMI が正常範囲でも体脂肪率が高ければ生活習慣病リスクは上がります。理想は「BMI + 体脂肪率 + 腹囲 + 血液検査(脂質・血糖)」を総合して判断すること。簡単に測れるからといって BMI だけで健康を判定せず、健康診断の他の項目と組み合わせて全体を見る癖をつけましょう。とはいえ、測定の手軽さと長年の疫学データの蓄積という強みは本物なので、定期的に測って自分の推移を見る使い方であれば、今でも非常に役立つ指標です。

BMI の歴史的背景にまで立ち返ると、そもそも Quetelet が発明したときの用途は「集団の分布を見る」ものでした。個人の健康判定に使うこと自体が後付けのアプリケーションなので、限界があるのはある意味当然とも言えます。使う側がその前提を理解していれば、今でも優秀な「ざっくり指標」として十分に機能します。

3 ツール使い分け

ここまで扱ってきた電卓・進数変換・BMI の 3 ツール、それぞれの得意分野と使いどころをまとめておきましょう。

電卓ツール — 日常と業務の汎用計算

四則演算、パーセント、累乗、ルート、三角関数、対数までこなす関数電卓です。税込計算、見積もり、割引の逆算、科学計算の確認用、DIY の木材カットなど、とにかく数字を叩きたい場面全般で主役になります。「iPhone 付属の電卓では物足りないが、Excel を立ち上げるほどじゃない」というシーンの埋め合わせに最適です。

進数変換ツール — プログラマとデザイナの橋渡し

2 進 / 8 進 / 10 進 / 16 進を同時に表示するツールで、プログラミング、デバッグ、CSS のカラーコード調整、UNIX パーミッションの確認、アセンブリの理解などに使います。「0xDEADBEEF って 10 進だといくつ?」「RGB(255, 128, 0) の HEX は?」という問いに、ひと叩きで答えられるのが強みです。

BMI 計算ツール — 健康管理の定番指標

身長と体重から BMI・判定区分・標準体重をまとめて出します。健康診断の結果票を見たあと、「自分の BMI はどの区分か」「標準体重まで何 kg あるか」を確認するのに使ってください。定期的に記録を取って「推移」を見るのが一番活きる使い方で、1 回の数字だけで健康状態を決めつけないのがコツです。

TL;DR — 3 ツールの使い分け

「とにかく計算したい」→ 電卓ツール。「プログラミング・CSS・デバッグで進数を行き来したい」→ 進数変換ツール。「健康管理の数字をざっくり把握したい」→ BMI ツール。さらに言えば、単位換算は 単位換算ガイドで紹介している 9 種類の換算ツール群が、文字数カウントは 文字数カウントガイドの文字数ツールが担当します。ベンリーの「計算・数値系ツール」はこの 3 + 9 + 1 系統でだいたい網羅できている、と覚えておけば困ったときの当たりが早く付きます。

よくある質問

なぜ 0.1 + 0.2 !== 0.3 なのか?

ほとんどのプログラミング言語が使っている IEEE 754 倍精度浮動小数点数は 2 進数で小数を表現するのですが、10 進数の 0.1 は 2 進数では 0.00011001100110011… と循環小数になります。64 ビットの有限領域ではこの無限列を途中で打ち切るしかなく、結果として「わずかに 0.1 より大きい」値が格納されます。0.2 も同じ事情で近似値になるので、足すと近似誤差が積み重なって 0.30000000000000004 のように正確な 0.3 からずれます。比較したいときは Math.abs(a - b) < Number.EPSILON のように誤差許容つきで判定するのが基本です。金額計算なら最小単位(円・セント・サトシなど)を整数で扱うと誤差が完全に消えます。

#FF8000 はなぜオレンジになる?(10 進だと?)

CSS カラーコード #FF8000 は 16 進 2 桁ずつで RGB を表現したもので、R = FF(16 進) = 255、G = 80(16 進) = 128、B = 00 = 0 という意味です。赤を最大にしつつ緑を半分だけ混ぜると、光の三原色の合成でちょうどビビッドなオレンジになります。24 ビットで表現できる色数は 256 × 256 × 256 = 16,777,216 色(約 1677 万色)で、これがデジタルディスプレイの標準的な色空間になっています。RGB 各チャンネルの値 0〜255 を覚えておくと、#000000 が真っ黒(全チャンネル 0)、#FFFFFF が真っ白(全チャンネル最大)、#FF0000 が純粋な赤、といった対応関係が直感的に読めるようになります。

0xDEADBEEF ってよく見るけど何?

0xDEADBEEF は 16 進数でちょうど「DEAD BEEF(死んだ牛肉)」と読める英単語風の並びになる 32 ビット定数で、10 進では 3,735,928,559、2 進では 1101 1110 1010 1101 1011 1110 1110 1111 です。メモリデバッグで「未初期化領域」「解放済み領域」などを目立たせるための目印(マジックナンバー)として古くから使われています。ダンプを見たときにこの値が出てきたら「そこは意図的に無効化された / 初期化前のメモリだ」とすぐ分かるわけです。同じ文化で 0xCAFEBABE(Java の class ファイルのマジックナンバー)、0xBADC0DE(bad code)、0xFEEDFACE なども有名です。16 進数でだけ成立する、ちょっとした遊び心のあるエンジニア文化です。

BMI 22 が理想の根拠は?

1991 年に東京大学の松澤佑次らが日本人約 5000 人の疫学調査を行い、BMI と生活習慣病(糖尿病・高血圧・高脂血症など)の発症率の関係を統計的に分析した結果、BMI 22 付近がもっとも有病率が低いことが分かったのがルーツです。この結果を受けて日本肥満学会が「BMI 22 を理想値とし、標準体重 = 身長² × 22 で算出する」という基準を定め、以降の健康診断や人間ドックで広く使われるようになりました。ただしこの 22 という値はあくまで「集団データの平均的な最適点」であって、個人の最適体重ではない点には注意が必要です。筋肉量・骨格・年齢・病歴によって個人の最適値はずれるので、BMI 22 をゴールにするのではなく「自分の体調がベストなときの値を基準にする」方が健全な使い方と言えます。

電卓で 2^10 を計算するには?

ベンリーの電卓ツールでは 2 ^ 10 のようにキャレット記号で累乗を直接書けます。答えは 1024。累乗ボタン(x^y または y^x と書かれていることが多い)がある関数電卓なら、2x^y10= の順に叩けば OK です。もし累乗ボタンがない電卓でも、2× で 10 回繰り返せば同じ答えになりますし、対数を使って 10^(10 × log 2) のように変換して求めることもできます。2^10 = 1024 はコンピュータの世界では「1 K」としてよく登場する値なので覚えておくと便利。同様に 2^16 = 65536(16 ビット整数の最大+1)、2^20 ≒ 100 万2^30 ≒ 10 億 なども頻出の暗記ポイントです。

計算系 3 ツールを試す

ベンリーには関数電卓、進数変換、BMI 計算の 3 ツールが揃っています。すべてブラウザ上で動き、入力内容はサーバーに送られません。複雑な式から 16 進カラーコードの下調べ、健康診断の数字の確認まで、使い分けて活用してください。

電卓ツールを開く →