カシオES・EX(初代ClassWiz)、絶対値の積分にバグ

## 衝撃のバグ

Redditにこんな記事があった。

https://www.reddit.com/r/calculators/comments/1kqc9qt/calculation_error_in_casio_fx_570_series/

$\int_{-15}^{15}|x^2-3x|dx$ の値が fx-570VN PLUS だと 2250 、 fx-580VN X だと 2259 になるという。

WolframAlpha だと 2259 。CWシリーズも演算が遅いものの 2259 となる。

https://www.wolframalpha.com/input?i2d=true&i=Integrate%5BAbs%5BSquare%5Bx%5D-3x%5D%2C%7Bx%2C-15%2C15%7D%5D&lang=ja

どうやらESシリーズの積分にバグがあるようだ。

試しに絶対値を外して WolframAlpha で計算させると 2250 。

https://www.wolframalpha.com/input?i2d=true&i=Integrate%5BPower%5Bx%2C2%5D-3x%2C%7Bx%2C-15%2C15%7D%5D&lang=ja

つまりESは絶対値を無視している。こんな簡単な式で…衝撃である。
（**追記：** 試しにグラフが負となる $\int_{3}^{0}|x^2-3x|dx$ を計算させるとESでも正しく$\frac{9}{2}$と表示できるため、単純に絶対値を無視しているわけでもないようだ。両端だけ見て正になっていれば区間を確かめず絶対値を取ってしまうのか、サンプリングの幅が大雑把すぎるのか。バグの謎はさらに深まる…。）


ただし、[関数電卓の精度を比較する](https://qiita.com/harycurl/items/3b10eeb3174ecaee4c1e)の記事で見た通り、ESシリーズとEXシリーズ（初代ClassWiz）の精度は同一で、演算速度は違うものの同一の答を出すものと思っていた。答にπが含まれるバグまで同一。
にも関わらず、この積分に関してはESシリーズとEXシリーズで答が異なる。どういうことなのだろう。

そこでClassPad.netエミュレータで各国のEXシリーズを試してみることにした。

## EXシリーズ比較
結果を表にまとめる。
| 機種名 | 積分の値 |
|:-:|:-:|
| fx-570/991EX | 2250 |
| fx-570/991ARX | 2250 |
| fx-991CE X | 2250 |
| fx-991DE X | 2250 |
| fx-JP900/JP700/JP500/530AZ | 2250 |
| fx-570/991LA X | 2250 |
| fx-991RS X | **2259** |
| fx-570/991SP X/XII | 2250 |
| fx-580VN X | **2259** |

fx-991RS X と fx-580VN X のみ正しい値を出している！

実はこれ、やってみる前からある程度予測がついていた。
今度は各EX機に搭載された N<sub>A</sub> （アボガドロ数）を表で示す。
| 機種名 | N<sub>A</sub>の値 | CODATA |
|:-:|:-:|:-:|
| fx-570/991EX | 6.02214129E23 | 2010 |
| fx-570/991ARX | 6.02214129E23 | 2010 |
| fx-991CE X | 6.022140857E23 | **2014** |
| fx-991DE X | 6.02214129E23 | 2010 |
| fx-JP900/JP700/JP500/530AZ | 6.02214129E23 | 2010 |
| fx-570/991LA X | 6.02214129E23 | 2010 |
| fx-991RS X | 6.02214076E23 | **2018** |
| fx-570/991SP X/XII | 6.02214129E23 | 2010 |
| fx-580VN X | 6.022140857E23 | **2014** |

fx-991CE X と fx-580VN X は CODATA2014 の値、
fx-991RS X は CODATA2018 の値が搭載されているのである。
その他のEX機は CODATA2010 の値。

つまり、多くの地域のEX機 → fx-991CE X → fx-580VN X → fx-991RS X の順に作られ、絶対値の積分に関しては fx-580VN X の時に改良が加えられたことが推測される。
（ただし、絶対値の積分が正しく計算できる2機種も、 11<sup>6</sup>/13 はπを含む分数で表示される。）

## では、EXクローン機や他のメーカーの関数電卓だと？
気になるのは他機種。これも試して表にまとめてみる。
| メーカー | 機種名 | 積分の値 | 所要時間 | 備考 |
|:-:|:-:|:-:|:-:|:-:|
| CASIO | fx-375ESA | 2250 | - | カシオES系 |
| Canon | F-789SG | **2259** | 約29秒 | カシオES系 |
| UNIONE | UC-800X | **2259** | 約12秒 | カシオEX系 |
| EATES | FC-991CN-D | **2259** | 約13秒 | カシオEX系 |
| deli | D991CN-X | **2259** | 約15秒 | カシオEX系 |
| CASIO | fx-JP500CW | **2259** | 約6秒 | カシオCW系 |
| deli | D992CN Pro | 2250 | - | カシオCW系 |
| SHARP | EL-520T | **2259** | 約6秒 | シャープ |
| TI | TI-30X Pro MP | 2250 | - | TI |

ES機相当の Canon F-789SG は試した機種の中で最も時間がかかったが正解。
EXクローンの3機種（UNIONE, EATES, deli）も正解。
シャープ機も正解（ただし他の積分に課題がある）。

一方、deliのCWクローンとTI機が不正解となった。

## 無理してカシオEX（旧ClassWiz）を入手しなくてもEXクローンで十分、むしろ良い面も
旧ClassWizは fx-JP500 のメーカー再生品在庫もほぼ無くなり、新品・新品同様品は手頃な価格での入手が難しくなってきた。
カシオの新品にこだわるならば、今後はESシリーズを買うか、使いづらいCWシリーズを買うことになるだろう。

一方、EX（旧ClassWiz）のクローン品が使いものにならないかというと、必ずしもそうではない。今回挙げたように、ESシリーズのバグを引きずったEXシリーズに対し、EXクローンはそのバグが解消しているケースもあるのだ。

もちろん他のバグが紛れ込む余地もあるのだが、ある程度売れているメーカーのクローン品であれば、支障のある問題はアマゾン等のレビューで指摘されるだろう。

このバグをきっかけとして、カシオEX機とEXクローン機との精度比較が進み、クローンであろうとよい機種が入手できる環境が整うことを期待したい。