内容

 先日、手持ちの関数電卓の資料を検索していたところ、こんなブログhttp://kyoro205.blog.fc2.com/blog-entry-273.htmlに出会ったのでKVでも試てみたところ、
記述のしかたによって演算誤差がでてしまいました。今回はスクリプトで書いてみました。
上記ブログではtan(355/226)を計算しています。

■キーエンス様に理由を問い合わせたところ、回答をいただきました。
------------------------------------------------------------
お問い合わのスクリプトの計算結果の違いですが、計算の
値が実数か、デバイスに格納された値かにより、内部的
に計算している部分が異なり、僅かですが演算誤差にも
違いが発生します。 
 また、演算後にTAN命令を実行することで、さらに誤差が
大きくなっておりました。

上記内容は、申し訳ございませんがKVの仕様となっております。
------------------------------------------------------------

■以下の3つの質問に対しても回答を頂いております。
1.どのように記述すれば真の値に近くなるか。
2.この現象は無理数を演算する時のみなのか。
3.どのコマンドがこの現象発生の対象になるのか。
------------------------------------------------------------
記述方法は、計算元の値が可変の場合は、デバイスで
指定して計算する方法のみのため、申し訳ございませんが、
他に方法がございません。
 
 計算の記述方法を実数で記述するか、デバイスを指定
して計算するかの違いのみで発生する現象のため、計算元
が可変の場合は、デバイス指定ですべて記述していただくと、
同じ計算での誤差のばらつきに差異が発生しないようになります。

上記の現象は、命令語に依存しているものではなく、デバイス
指定で計算するか、実数で計算するかの違いで発生するものに
なります。
------------------------------------------------------------

と言う事らしいのでプログラミングの参考にして下さい。

計算結果の正解は…
https://keisan.casio.jp/calculator
上記サイトの計算式の欄に「tan(355/226)」を記述して「計算」ボタンをクリックすると計算してくれます。
答えは -7497258.18532559 らしいです。

●PDF を表示   ●コードをダウンロード 
◆ スクリプトの記述


・ボックススクリプトに記述しています。スクリプトに関してはユーザーズマニュアル(スクリプト部抜粋)を参照してください。
・1行目:TAN()の引数に定数として除算で記述しました。
・7行目:定数を一旦変数に代入しTAN()の引数に除算として記述しました。
・10行目:除算結果を一旦変数に代入して、それをTAN()の引数としました。
◆ 変換ラダーの表示

■ 定数を引数

・「@EM0.DF = TAN ( 355.df / 226.df )」の変換結果です。
・内部では「 ( 355.df / 226.df )」の結果を定数としてレジスタに代入しています。
・除算の計算結果はスクリプト6行目のDM0と同じです。

https://keisan.casio.jp/calculatorでは「1.570796460176991150443」なので正解でしょう。


■ 除算結果を引数

・スクリプト4〜7行のラダー変換結果です。スクリプト7行目の変換(ラダー00011行)では当然ですが、除算の結果をレジスタに代入し、TAN()の引数としています。
・結果的には3種類の記述の中でこの結果だけが違っていました。
・@EM8の結果が「-7497258.17914037」。正解が「-7497258.18532559」となっているので、この記述が正解に近い結果となりました。



・スクリプト9行目の変換結果です。ラダー00003行目と同じく「( 355.df / 226.df )」が内部で演算されていて、DM8に代入されています。
・ラダー00015行でその結果をTAN()の引数としています。
・その結果、スクリプト1行目と10行目が同じ答えとなるのでしょう。
◆ 結論


・正解の答えは「-7497258.18532559」なので、@EM0と@EM16の答え「-7497258.25402565より@EM8の答え「-7497258.17914037
の方が真の値に近くなりました。
・記述作法としてはラダー変換で除算をさせない様、引数に変数の除算を記述するのが良い事が分かりました。

・コードをダウンロードして実験してください。シミュレーションを行うか実機で起動してください。
・[TRG]をダブルクリックすると演算をします。