(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023047128
(43)【公開日】2023-04-05
(54)【発明の名称】演算エラー警告装置及び演算エラー警告用プログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20230329BHJP
G06F 7/499 20060101ALI20230329BHJP
G06F 8/41 20180101ALI20230329BHJP
【FI】
G06F11/36 104
G06F7/499 647
G06F8/41 100
【審査請求】有
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021156071
(22)【出願日】2021-09-24
(71)【出願人】
【識別番号】391016358
【氏名又は名称】東芝情報システム株式会社
(74)【代理人】
【識別番号】100090169
【弁理士】
【氏名又は名称】松浦 孝
(74)【代理人】
【識別番号】100074147
【弁理士】
【氏名又は名称】本田 崇
(74)【代理人】
【識別番号】100124497
【弁理士】
【氏名又は名称】小倉 洋樹
(72)【発明者】
【氏名】山中 明
【テーマコード(参考)】
5B042
5B081
【Fターム(参考)】
5B042HH01
5B042HH08
5B042HH12
5B042MC17
5B042MC23
5B042MC28
5B081CC61
(57)【要約】
【課題】適切な警告を発することが可能な演算エラー警告装置を提供する。
【解決手段】ソースプログラムのソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算を検出する要チェック演算検出手段110と、前記要チェック演算によって数値の表現形式を変更する形式変換処理を行い、更に、この表現形式処理により変更された形式変換処理結果を元に戻す形式逆変換処理を行う形式変換・逆変換処理手段120と、前記形式変換・逆変換処理手段120により求められた戻数値と、前記形式変換処理前の原数値との差分を誤差として求める誤差検出手段130と、前記誤差と予め設定されている誤差閾値とを比較して演算エラー警告を出力するエラー警告手段140とを具備する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ソースプログラムのソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算を検出する要チェック演算検出手段と、
前記要チェック演算によって数値の表現形式を変更する形式変換処理を行い、更に、この表現形式処理により変更された形式変換処理結果を元に戻す形式逆変換処理を行う形式変換・逆変換処理手段と、
前記形式変換・逆変換処理手段により求められた戻数値と、前記形式変換処理前の原数値との差分を誤差として求める誤差検出手段と、
前記誤差と予め設定されている誤差閾値とを比較して演算エラー警告を出力するエラー警告手段と
を具備することを特徴とする演算エラー警告装置。
【請求項2】
前記誤差閾値は、注意喚起用の第1の誤差閾値と、この第1の誤差閾値より大きな第2の誤差閾値から構成され、
前記エラー警告手段は、前記誤差が前記第1の誤差閾値を超え前記第2の誤差閾値の間にある場合には、注意喚起メッセージを出力し、前記誤差が前記第2の誤差閾値を超えた場合には警告メッセージを出力することを特徴とする請求項1に記載の演算エラー警告装置。
【請求項3】
前記誤差が前記演算で扱っている数値における値範囲の最大値に対してどの程度の割合かを示す誤差率を算出する誤差率算出手段を備え、
前記エラー警告手段は、前記誤差率と予め設定されている誤差率閾値とを比較して演算エラー警告を出力することを特徴とする請求項1に記載の演算エラー警告装置。
【請求項4】
前記誤差率閾値は、注意喚起用の第1の誤差率閾値と、この第1の誤差率閾値より大きな第2の誤差率閾値から構成され、
前記エラー警告手段は、前記誤差率が前記第1の誤差率閾値を超え前記第2の誤差率閾値の間にある場合には、注意喚起メッセージを出力し、前記誤差率が前記第2の誤差率閾値を超えた場合には警告メッセージを出力することを特徴とする請求項3に記載の演算エラー警告装置。
【請求項5】
前記要チェック演算検出手段は、ソースプログラムのソースコードに含まれている演算における演算子の左側と右側の数値の形式である、小数点以下の分解能を表すLSB分解能情報による表現形式の変更である演算を検出することを特徴とする請求項1乃至4のいずれか1項に記載の演算エラー警告装置。
【請求項6】
演算エラー警告装置におけるコンピュータを、
ソースプログラムのソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算を検出する要チェック演算検出手段、
前記要チェック演算によって数値の表現形式を変更する形式変換処理を行い、更に、この表現形式処理により変更された形式変換処理結果を元に戻す形式逆変換処理を行う形式変換・逆変換処理手段、
前記形式変換・逆変換処理手段により求められた戻数値と、前記形式変換処理前の原数値との差分を誤差として求める誤差検出手段、
前記誤差と予め設定されている誤差閾値とを比較して演算エラー警告を出力するエラー警告手段
として機能させることを特徴とする演算エラー警告用プログラム。
【請求項7】
前記誤差閾値は、注意喚起用の第1の誤差閾値と、この第1の誤差閾値より大きな第2の誤差閾値から構成され、
前記コンピュータを前記エラー警告手段として、前記誤差が前記第1の誤差閾値を超え前記第2の誤差閾値の間にある場合には、注意喚起メッセージを出力し、前記誤差が前記第2の誤差閾値を超えた場合には警告メッセージを出力するように機能させることを特徴とする請求項6に記載の演算エラー警告用プログラム。
【請求項8】
前記コンピュータを、前記誤差が前記演算で扱っている数値における値範囲の最大値に対してどの程度の割合かを示す誤差率を算出する誤差率算出手段として機能させ、
前記コンピュータを、前記エラー警告手段として、前記誤差率と予め設定されている誤差率閾値とを比較して演算エラー警告を出力するように機能させることを特徴とする請求項6に記載の演算エラー警告用プログラム。
【請求項9】
前記誤差率閾値は、注意喚起用の第1の誤差率閾値と、この第1の誤差率閾値より大きな第2の誤差率閾値から構成され、
前記コンピュータを前記エラー警告手段として、前記誤差率が前記第1の誤差率閾値を超え前記第2の誤差率閾値の間にある場合には、注意喚起メッセージを出力し、前記誤差率が前記第2の誤差率閾値を超えた場合には警告メッセージを出力するように機能させることを特徴とする請求項8に記載の演算エラー警告装置。
【請求項10】
前記コンピュータを前記要チェック演算検出手段として、ソースプログラムのソースコードに含まれている演算における演算子の左側と右側の数値の形式である、小数点以下の分解能を表すLSB分解能情報による表現形式の変更である演算を検出するように機能させることを特徴とする請求項6乃至9のいずれか1項に記載の演算エラー警告用プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、演算エラー警告装置及び演算エラー警告用プログラムに関するものである。
【背景技術】
【0002】
コンピュータにおいて行われる演算においては、その演算における演算子の左側と右側の数値の形式が一致している必要がある。ここに、数値の形式とは、例えば単位である。例えば、長さのm(メートル)とmm(ミリメートル)を加える演算はエラーである。
【0003】
他には、小数点以下の分解能を表すLSB分解能情報を挙げることができる。例えば、10進数の数値「221」は、2進数で「11011101」となり、下位2bitを小数点以下と規定すると、「110111.01」=55.25を表すことができる。「下位2bitを小数点以下と規定する」は長いので、「下位2bitを小数点以下と規定する」場合には、最下位bitは0.25であるから、「221[LSB]」のように記載することで、「0.25[1/LSB]」を掛けて、221[LSB]*0.25[1/LSB]=55.25と、小数を求めることができる。恰も、「0.25」が単位のようであるので分解能を表している、と言える。
【0004】
「組み込み」開発などでは扱う数値は物理量であり、単位があるから例えばmVの場合には、LSBを0.25[mV/LSB]と表す。なお、上記の例では、分解能が2の冪乗の場合を例としたが、扱う対象値が物理量であるから、例えば0.77[mV/LSB]のように、2の冪乗以外も可能である。16bit符号あり整数のLSBを0.001[m/LSB]とすると、長さを-32.768m~32.767mの範囲を表現できる。また、LSBを用いる場合にも、オフセットというバイアス値を用いることが行われており、16bit符号あり整数のLSBを0.01[℃/LSB]、オフセットを-273.15℃とすると、-273.15℃~382.20℃の範囲の温度を表現可能となる。
【0005】
上記のようにコンピュータにおける演算において、その演算における演算子の左側と右側の数値の形式が一致するように形式の変更を行う場合に、誤差が発生することがあり、そのまま放置すると組み込み装置を適切に動作させることができないことになる。しかしながら、現状ではこのようなソースプログラムにおける不具合については、人がチェックしており、見落としが生じる可能性がある。また、人のチェックには膨大な時間とコストが必要であり、それでも不十分であった。
【0006】
特許文献1には、データ型について変更を行うコンパイラ装置が開示されている。この引用文献1の装置では、データ型についてのものである。また、特許文献2には型変換を行うことが記載されているものの、演算の場合の型変換ではない。また、特許文献3には、不要な型変換操作の削除を行うものが開示されている。しかしながら、演算が誤差発生につながる不具合を検出するものではなく、ソースプログラムを適正なものとすることはできない。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2003-150386号公報
【特許文献2】特開2011-85967号公報
【特許文献3】特開平5-324344号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明は上記のような演算エラーに関する技術の現状に鑑みてなされたもので、その目的は、ソースプログラムにおいて演算エラーが生じる可能性のある場合に、適切な警告を発することが可能な演算エラー警告装置及び演算エラー警告用プログラムを提供することである。
【課題を解決するための手段】
【0009】
本実施形態に係る演算エラー警告装置は、ソースプログラムのソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算を検出する要チェック演算検出手段と、前記要チェック演算によって数値の表現形式を変更する形式変換処理を行い、更に、この表現形式処理により変更された形式変換処理結果を元に戻す形式逆変換処理を行う形式変換・逆変換処理手段と、前記形式変換・逆変換処理手段により求められた戻数値と、前記形式変換処理前の原数値との差分を誤差として求める誤差検出手段と、前記誤差と予め設定されている誤差閾値とを比較して演算エラー警告を出力するエラー警告手段とを具備することを特徴とする。
【図面の簡単な説明】
【0010】
【
図1】本発明の第1の実施形態に係る演算エラー警告装置のブロック図。
【
図2】本発明の第1の実施形態に係る演算エラー警告装置に用いる誤差閾値の例を示す図。
【
図3】本発明の第1の実施形態に係る演算エラー警告装置の動作を示すフローチャート。
【
図4】本発明の第2の実施形態に係る演算エラー警告装置のブロック図。
【
図5】本発明の第2の実施形態に係る演算エラー警告装置に用いる誤差率閾値の例を示す図。
【
図6】本発明の第2の実施形態に係る演算エラー警告装置の動作を示すフローチャート。
【発明を実施するための形態】
【0011】
以下添付図面を参照して、本発明の実施形態に係る演算エラー警告装置及び演算エラー警告用プログラムを説明する。各図において同一の構成要素には、同一の符号を付して重複する説明を省略する。
【0012】
図1に、本発明の第1の実施形態に係る演算エラー警告装置を示す。この実施形態に係る演算エラー警告装置は、データベース200とCPU(中央処理装置)100と、キーボード等の情報入力を行うための入力部150、情報を出力する出力手段としての表示手段300とを備えている。即ち、演算エラー警告装置は、ワークステーション、サーバ、パーソナルコンピュータ等のコンピュータ装置によって構成することができる。
【0013】
CPU100には、プログラムにより実現される各手段として、要チェック演算検出手段110、形式変換・逆変換処理手段120、誤差検出手段130、エラー警告手段140が備えられている。要チェック演算検出手段110は、例えば入力部150から入力されてCPU100へ到来するソースプログラムのソースコードを分析し、ソースプログラムのソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算を検出するものである。表現形式とは、例えば、小数点以下の分解能を表すLSB分解能情報を挙げることができる。上記ソースプログラムは、図示しない記憶媒体やネットワークからデータベース200に記憶しておいたものであっても良い。
【0014】
即ち、ソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算とは、例えばLSB変換とLSB逆変換によって数値における表現形式が変更されるような場合を指す。
【0015】
形式変換・逆変換処理手段120は、上記要チェック演算によって数値の表現形式を変更する形式変換処理を行い、更に、この表現形式処理により変更された形式変換処理結果を元に戻す形式逆変換処理を行うものである。誤差検出手段130は、上記形式変換・逆変換処理手段120により求められた戻数値と、上記形式変換処理前の原数値との差分を誤差として求めるものである。エラー警告手段140は、上記誤差と予め設定されている誤差閾値とを比較して演算エラー警告を出力するものである。
【0016】
上記予め設定されている誤差閾値は、ソースプログラムのソースコードに含まれている演算毎に与えられ、データベース200の誤差閾値ファイル210に記憶されている。即ち、
図2に示されるように、ソースプログラムにおける演算が記載されているアドレスと演算の演算子毎に、誤差閾値が数値で設定されている。勿論、形式の変換によって誤差が生じない数値の場合には、誤差閾値は設定されない。
【0017】
誤差閾値は、注意喚起用の第1の誤差閾値と、この第1の誤差閾値より大きな第2の誤差閾値から構成されることができる。エラー警告手段140は、上記誤差が前記第1の誤差閾値を超え上記第2の誤差閾値の間にある場合には、注意喚起メッセージを出力し、上記誤差が上記第2の誤差閾値を超えた場合には警告メッセージを出力するように動作することができる。ここに、注意喚起メッセージは「ここの形式変換では問題はありませんが、この数値を何度か演算する場合には注意を要します。」等を例とすることができ、警告メッセージとしては「この形式変換において誤差が大きく、演算誤りを生じますので、警告致します。」等を例とすることができる。また、エラー警告手段140は、上記誤差が上記第1の誤差閾値以下の場合には、「この形式変換において問題はありません」などの適正な変換を通知するメッセージを出力するようにしても良い。これらの警告メッセージは、データベース200の警告メッセージファイル220に記憶されている。
【0018】
以上のように構成された演算エラー警告装置は、
図3のフローチャートに示すように演算エラー警告を行う。例えば入力部150から入力されてCPU100へ到来するソースプログラムのソースコードを上側の行から分析し、ソースプログラムのソースコードに含まれている演算によって数値における表現形式を変更する要チェック演算を検出し(S11)、該当の演算有りかを判定する(S12)。
【0019】
上記ステップS12においてYESへ分岐すると、ステップS13へ進み、ステップS12で検出された要チェック演算によって数値の表現形式を変更する形式変換処理を行い、更に、この表現形式処理により変更された形式変換処理結果を元に戻す形式逆変換処理を行う(S13)。このステップS13の処理において、数値が物理量であり、その数値の形式が、LSB変換の場合には、形式変換処理において、論理値=(型変換)(物理量×LSB値)・・・(式1)により形式変換処理結果である論理値を得る。上記「×」は「÷」になることもある。また、形式変換処理結果を元に戻す形式逆変換処理では、次の(式2)により得られた論理値を用いて形式変換結果である物理量(元に戻した結果)を得る。物理量=(型変換)(論理値÷LSB値)・・・(式2)
上記(式2)では、上記「÷」は「×」になることもある。
【0020】
上記の(式1)によって、例えば、物理量として16bit符号ありの、整数32767をLSB値0.001で論理値に変換して、その後LSB逆変換して物理量に戻す場合を例にする。物理量32767をLSB値0.001で論理値に変換すると、論理値32.767が算出される。
即ち、物理量(32767)×LSB値(0.001)=論理値(32.767)
である。
【0021】
この論理値の演算結果が32.7679となったと仮定すると、誤差を求める式は、
誤差=(論理値/LSB値)-(物理量型)(論理値/LSB値)・・・(式3)
である。
【0022】
上記の通り、ここでは、物理量は16bit符号ありの整数の(物理量型)であるから、論理値から物理値にLSB変換した際に切り捨てられる小数点以下の値が誤差となる。
上記の例では、論理値をLSB値で割った値(論理値/LSB値)が、32.7679であるから、論理値(32.767)との差0.9が誤差となる。
【0023】
以上のようにして形式逆変換処理結果が得られ、誤差=(論理値/LSB値)-(物理量型)(論理値/LSB値)・・・(式3)により誤差を得る(S14)。この(式3)の「(物理量型)(論理値/LSB値)」は、形式逆変換処理される以前の物理量を求めた結果(形式逆変換処理の結果)である。
【0024】
以上のようにして誤差が求まると、誤差と予め設定されている誤差閾値とを比較してメッセージを決定し、該メッセージを表示手段300から出力する(演算エラー警告を出力する(S15))。誤差閾値が、注意喚起用の第1の誤差閾値と、この第1の誤差閾値より大きな第2の誤差閾値から構成される場合には次のように処理が行われる。即ち、上記誤差が前記第1の誤差閾値を超え上記第2の誤差閾値の間にある場合には、「ここの形式変換では問題はありませんが、この数値を何度か演算する場合には注意を要します。」等の注意喚起メッセージを出力し、上記誤差が上記第2の誤差閾値を超えた場合には「この形式変換において誤差が大きく、演算誤りを生じますので、警告致します。」等の警告メッセージを出力するように動作することができる。また、エラー警告手段140は、上記誤差が上記第1の誤差閾値以下の場合には、適正な変換を通知するメッセージを出力するようにしても良い。
【0025】
図4に、本発明の第2の実施形態に係る演算エラー警告装置を示す。この第2の実施形態の装置は第1の実施形態の装置の構成を備え、これに加えて、CPU100Aに誤差率算出手段160を備えているものである。誤差率算出手段160は、上記誤差検出手段130が求めた上記誤差が、上記ソースプログラムのソースコードに含まれている演算で扱っている数値(ここでは、物理値)における値範囲の最大値に対してどの程度の割合かを示す誤差率を算出するものである。この第2の実施形態では、エラー警告手段140は、上記誤差率と予め設定されている誤差率閾値とを比較して演算エラー警告を出力する。
【0026】
上記予め設定されている誤差率閾値は、ソースプログラムのソースコードに含まれている演算毎に与えられ、データベース200の誤差率閾値ファイル230に記憶されている。即ち、
図5に示されるように、ソースプログラムにおける演算が記載されているアドレスと演算の演算子毎に、誤差率閾値が数値で設定されている。勿論、形式の変換によって誤差が生じない数値の場合には、誤差率閾値は設定されない。
【0027】
誤差閾値は、注意喚起用の第1の誤差閾値と、この第1の誤差閾値より大きな第2の誤差閾値から構成されることができる。エラー警告手段140は、上記誤差が前記第1の誤差閾値を超え上記第2の誤差閾値の間にある場合には、注意喚起メッセージを出力し、上記誤差が上記第2の誤差閾値を超えた場合には警告メッセージを出力するように動作することができる。ここに、注意喚起メッセージは「ここの形式変換では問題はありませんが、この数値を何度か演算する場合には注意を要します。」等を例とすることができ、警告メッセージとしては「この形式変換において誤差が大きく、演算誤りを生じますので、警告致します。」等を例とすることができる。また、エラー警告手段140は、上記誤差が上記第1の誤差閾値以下の場合には、「この形式変換において問題はありません」などの適正な変換を通知するメッセージを出力するようにしても良い。これらの警告メッセージは、データベース200の警告メッセージファイル220Aに記憶されている。
【0028】
以上のように構成された第2の実施形態に係る演算エラー警告装置は、
図6のフローチャートに示すように演算エラー警告を行う。第2の実施形態の動作を示す
図6のフローチャートは、第1の実施形態の動作を示す
図3のフローチャートとほぼ同じであり、
図3のステップS14の次にステップS16が挿入され、
図3のステップS15がステップS15Aに変更されている。このため、以下では第1の実施形態と異なる処理を主に説明する。
【0029】
即ち、ステップS14において誤差を検出すると、次に、ステップS14において求めた上記誤差が、上記ソースプログラムのソースコードに含まれている演算で扱っている数値(ここでは、物理値)における値範囲の最大値に対してどの程度の割合かを示す誤差率を算出する(S16)。
【0030】
例えば、上記ソースプログラムにおいて扱っている物理量(数値)の範囲が-10~10であり、得られた誤差が0.9の場合には、誤差率は9%(0.9/10)となる。また、上記ソースプログラムにおいて扱っている物理量(数値)の範囲が-100~100であり、得られた誤差が0.9の場合には、誤差率は0.9%(0.9/100)となる。このように、誤差が同じでもソースプログラムにおいて扱っている物理量(数値)の範囲が異なる場合には、誤差率は異なる。即ち、誤差率は誤差がシステムの演算全体に与える度合いを表し、誤差率が小さい(大きい)場合はシステムに与えるエラーの度合が小さい(大きい)と言える。本実施形態では、このような観点から誤差率を用いる。
【0031】
以上のようにして誤差率が求まると、誤差率と予め設定されている誤差率閾値とを比較してメッセージを決定し、該メッセージを表示手段300から出力する(演算エラー警告を出力する(S15A))。誤差率閾値が、注意喚起用の第1の誤差率閾値と、この第1の誤差率閾値より大きな第2の誤差率閾値から構成される場合には次のように処理が行われる。即ち、上記誤差が前記第1の誤差率閾値を超え上記第2の誤差率閾値の間にある場合には、「ここの形式変換では問題はありませんが、この数値を何度か演算する場合には注意を要します。」等の注意喚起メッセージを出力し、上記誤差が上記第2の誤差率閾値を超えた場合には「この形式変換において誤差が大きく、演算誤りを生じますので、警告致します。」等の警告メッセージを出力するように動作することができる。また、エラー警告手段140は、上記誤差が上記第1の誤差率閾値以下の場合には、適正な変換を通知するメッセージを出力するようにしても良い。
【0032】
以上のように本実施形態によれば、演算における演算によって変数をLSB変換して論理値などの数値に変換した後に、再びLSB変換(逆LSB変換)によって元の表現形式に戻した場合に誤差が生じるケースについて、例えば、特に大きな誤差が生じる場合には確実に警告を与えてプログラムの変更を促すことができ、適正なプログラムの作成に寄与することが期待できる。
【0033】
以上の第1の実施形態では誤差による警告メッセージを出力し、第2の実施形態では誤差率による警告メッセージを出力するようにしたが、演算エラー警告装置に双方の機能を持たせ、少なくとも一方の機能による動作を行わせるように入力部150から動作選択のコマンドを与える構成を採用しても良い。
【符号の説明】
【0034】
100、100A CPU
110 要チェック演算検出手段
120 形式変換・逆変換処理手段
130 誤差検出手段
140 エラー警告手段
150 入力部
200 データベース
210 誤差閾値ファイル
220、220A 警告メッセージファイル
230 誤差率閾値ファイル
300 表示手段