メインコンテンツへスキップ
見出し画像

0%がなぜ「1%」より難しいのか——コンピュータにとって「ゼロ」は最も危険な数字だった

    消費税の引き下げ議論が盛んになるたびに、こんなニュースが流れてきます。

    「1%引き下げの場合、システム改修に半年」
    「0%(廃止)の場合、1年以上」

    ……え、逆じゃない?と思いませんか?

    0%って、要は「何もしない」ってことじゃないの?と。

    答えは逆で、コンピュータの世界では「ゼロ」は最も扱いが難しい数字のひとつなのです。

    今日はその理由を、できるだけ簡単に記事にしてみました。


    なぜ1%の対応が半年かかるのか?

    そもそも「1%変わるだけで半年もかかるの?」という疑問もありますよね。

    レジシステムというのは、思った以上に複雑です。
    税率の数字一か所を書き換えればいいわけではなく、

    価格表示
    領収書
    会計ソフトとの連携
    軽減税率の区分け
    ポイント還元の計算
    外税内税の切り替え

    ……と、税率が絡む箇所が何十か所、何百か所とあります。

    それをまずは全部洗い出して、テストして、つながっているところも含めて問題がないか?を確認する。
    だから半年ぐらいかかってしまうんですね💦

    では0%はなぜさらに倍かかってしまうんでしょうか?

    コンピュータにとって「ゼロ」がいかに特別か

    理由① ゼロで割ると、コンピュータは壊れる

    突然ですが、算数の話をします。

    何かをゼロで割ることは、数学的に「できない」のです。

    「10÷0は?」と電卓に打ち込むと「エラー」というような表示されます。
    これは計算できないからです。

    画像
    これは、私のMacに10÷0を計算してもらった結果です。

    ゼロで割った答えは「無限大」になるからとも言われますが、そもそも「無限大」という数字はコンピュータには存在しません。

    レジシステムにはこういう計算があります。

    「税込価格から税抜価格を逆算する」

    たとえば税率8%なら:税抜価格 = 税込価格 ÷ 1.08

    10%なら:税抜価格 = 税込価格 ÷ 1.10

    では消費税率が0%になったら?

    税抜価格 = 税込価格 ÷ 1.00

    ……あれ、これは大丈夫に見えますね。1.00で割ればいい。

    でもシステムの中身はこうなっていることがあります:

    税抜価格 = 税込価格 ÷ (税率 ÷ 100)

    税率が10なら ÷ 0.10、税率が8なら ÷ 0.08。これを税率0にすると——

    ÷ 0.00、つまりゼロ除算が発生します。

    コンピュータはこれを処理できず、システムがクラッシュするか、意味不明な数字を返します。
    このパターンが、どこかに必ず潜んでいます。
    探して、全部直す。
    それだけで相当な時間がかかります。

    理由② コンピュータはゼロを「偽(ウソ)」と判定する

    多くのプログラミング言語では、ゼロは「偽(False)」として扱われます。

    日本語で言うと「ゼロ=ない=無効」という解釈です。

    現実の生活でも、「何もない」ことをゼロで表現しますよね。
    財布に0円=お金がない。
    気温0度以下=危険。
    0点=答えられなかった。

    レジシステムの中には、こういう判定がたくさんあります:

    「もし税率があれば、税額を計算する」

    税率が10%でも8%でも3%でも「ある(=True)」なので、税額を計算します。
    でも税率が0%になると——「ない(=False)」と判定されて、税の計算自体がスキップされてしまうのです。

    「税率0%だから税額0円」
    と
    「税率の設定がないから税額計算をスキップした」
    は、結果的に同じ0円になります。

    でも意味がまったく違います。
    前者は正しい処理で、後者はバグです。

    消費税率0%では、この区別を全システムで明確にしなければなりません。

    理由③ 30年間「ゼロはありえない」という前提で作られてきた

    日本に消費税が導入されたのは1989年。
    3%からスタートして、5%、8%、10%と推移してきました。

    この35年間、消費税率が0になったことは一度もありません。

    これはシステム設計者にとって、無意識の「常識」になっていきます。

    「税率は必ずゼロより大きい数が入ってくる」

    この前提のもとで作られたコードが、全国のレジシステムに35年分、積み重なっています。

    たとえば「税率は1以上でなければエラー」というチェックが入っていたり、「税率フィールドには0を入力できない」というデータベースの制約があったり。
    これらは当時の設計者が「おかしな数字が入らないよう保護している」つもりで作ったものです。
    でも消費税0%になると、それが全部バグに変わります。

    古いシステムほど「ゼロ排除の罠」がたくさん眠っていると想定されます。

    ゼロはそもそも「発明された概念」だった

    少し歴史の話をすると、ゼロという数字は人類にとって長い間「存在しなかった」ものです。

    古代エジプト人もローマ人も、ゼロを数として扱う概念を持っていませんでした。
    「何もないものを数える必要はない」という発想です。
    ゼロが数として体系的に使われ始めたのは、7世紀のインドが起源とされています。

    コンピュータはその2000年の歴史をギュッと圧縮したような存在で、ゼロを「無効」「存在しない」「偽」として扱うクセが根深く残っています。
    ゼロは「数字」であると同時に「何かの欠如」を意味するものとして、現代のプログラムにも紛れ込んでいるのです。

    さらに言うと、コンピュータ内部でゼロには不思議な二面性があります。
    「+0(プラスのゼロ)」と「-0(マイナスのゼロ)」が、数学的には同じなのに、厳密には別の表現として存在することもあります。
    また、「0÷0」は「無限大」ですらなく、「数でもない(NaN: Not a Number)」という特殊な状態になります。

    ゼロは、数の世界で最も哲学的な存在なのです。

    まとめ:「0%」は「税がなくなる」のではなく「全ての前提が変わる」

    消費税0%というのは、レジシステムにとって「税率を変える」のではなく、「税というものが存在する世界から、しない世界への移行」を意味します。

    • ゼロ除算が発生するすべての計算を洗い出す

    • ゼロを「偽」と判定するすべての条件分岐を修正する

    • 35年間「ゼロはありえない」として作られた無数の前提を撤廃する

    これを、何千・何万という処理の中から探して直して、テストして、「壊れていないこと」を証明する。
    だから1年かかるのです。

    「1%のほうが簡単」というのは、あくまで今の仕組みの延長線上にある話だから。
    「0%は別世界への引越し」だから難しい——というのが、エンジニアたちの正直な感覚なのだと思います。

    コンピュータの中で、ゼロはいつも特別な扱いを受けています。

    「ゼロにするだけでしょ?」と言いたくなっているそこのアナタ。
    気持ちは分かります。
    でも、35年かけて積み上げてきた「ゼロはありえない」という世界の設計を、全部見つめ直す作業と考えるとどうでしょう。

    ちょっと見方が変わったでしょうか?

    この記事を読んで「面白かった」と思ったら、スキ・フォローしていただけると励みになります。投資・ビジネス・AIなど、「ちょっとディープだけど分かりやすく」をモットーに発信しています。

    #消費税
    #テクノロジー
    #IT
    #エンジニア
    #経済
    #ビジネス
    #教養
    #学び

     
     
    ☕️ のあ🐾カフェのマスター 🐾 相棒のあ🐾の飼い主 趣味のキャンプはInstagramで投稿中📸 🐾Amazonアソシエイトに挑戦中🐾

    あなたへのおすすめ