関数電卓コラム

07/10/22 関数電卓のバグその2(時刻計算の切り捨て問題)

Canon F-502のテストをやっていて,ある特定の条件で時間(角度)計算が期待したとおりの答を返さないことに気がついた.一例として,1時23分を入力し,「時」変換→逆変換をやってみよう.

[1] [.] [2] [3] [->゚ ' '']

答え:1.383333333(時間)

[2ndF] [->゚ ' '']

答え:1.266000    ???

普通なら表示は元に戻るはずなのだが結果は「1.226000」となる.しばらく悩んだ後,「ああ,これは『1時間22分60秒』の意味か!」と気がついた.1時間23分は時間に直すと1.38333....と割り切れないが,これを逆変換するとき,変換時に生じた切り捨てが原因で60秒に僅かに足りなくなる.これを,切り上げないで60秒と表示してしまうのだ.1.2259999....なら「切り捨て誤差」と切り捨てられるのに,60と言い切ってしまうとコイツはバグである.

当初,この問題はF-502(というかCanonの電卓)の問題かと思っていたが,テストしてみると[->゚ ' '']キーで時・分を時間に変換するタイプの関数電卓に共通する問題と言うことが解った.

テストしてバグがあることが判明した機種を以下に列挙する.

SHARP EL-501E
Canon F-500
Canon F-502
Fx-82LB

要するに,[->゚ ' '']キーで時・分を時間に変換するタイプの関数電卓は全滅,ということ.標準タイプの関数電卓で唯一[゚ ' '']による時・分入力を採用しているCASIO fx-260Aにこの問題は発生しなかった.

一応,[゚ ' '']で時・分入力をするタイプの電卓も全てチェックしてみた.テスト方法は

[1] [゚ ' ''] [2] [3] [゚ ' ''] [=]

1時23分を入力

[SHIFT] [->゚ ' '']

答え:1.383333333(時間)

[SHIFT] [->゚ ' '']

答え:1゚23'

時・分入力タイプの電卓は全て合格だった.

ここから解ることは,関数電卓のアルゴリズムは各社独自のものではなく,ある「雛形」のようなものがあるということだ.いずれ,関数電卓のアルゴリズムの源流について調べてみたい.

ちなみに,私がその設計思想を高く評価しているHP 35sにも上記の問題が生じることが判明.ただしこれは表示の桁数を制限した,限られたケースでのみ起こる.

[1] [.] [3] [8] [3] [3] [3] [3] [SHIFT] [->HMS]

答え:1.22599988

[SHIFT] [DISPLAY] [1 FIX] [4] ←表示桁数を4桁に制限

答え:1.2260

[SHIFT] [DISPLAY] [4 ALL] ←全桁表示

答え:1.22599988

HPの場合,表示桁数制限で繰り上がりが生じた場合,分→時への繰り上げを行わず60と表示する.これも,一種のバグと言って良いだろう.
※最初のテストのように,まず1.23と打鍵してから[SHIFT] [HMS->]で時間表示に変換し,[SHIFT] [->HMS]で逆変換すると1.23に戻る.この辺はさすがにHP.

さて,この問題は何十年も前から存在するはずで,知っている人は昔から知っていただろうと思っていた.しかし調べてもネット上には情報が見つからない.どなたか,この問題について指摘したページをご存じなら教えて欲しい.