ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS
【質問】
浮動小数点の変数の期待値に値を設定しましたが、出力結果と値が異なるにもかかわらず、期待値判定がOKになってしまいます。なぜでしょうか?
【回答】
これは、浮動小数点変数の有効桁数が原因です。例えば、浮動小数点変数がfloat型の場合、変数は4バイト=32ビットのサイズを持ちますが、そのビットの使われ方は下図のようになります。そのうち、「仮数部 =23bit」が表すことの出来る有効数字(桁数)に当たります。これは、2進数で24ビット(仮数部23ビット+符号)、10進数では約7桁になります。
下の様な関数のテストにおいて、CSVファイルの入力としてfloat型の引数@finに「1.123456789」を設定した場合、float型の変数には上位7桁までしか格納出来ません。このためカバレッジマスターは、この有効数字を越えた桁数に対して、IEEE 754に定義された「最近値への丸め」(四捨五入)を行い、「1.123457」を引数@finに入力します。
期待値に有効数字を越えた桁数を設定した場合も、同様にIEEE 754の最近値への丸めが適用され、テストでの期待値比較には「1.123457」が使用されます。このため、入力CSVファイルの出力変数(gb_fval)に、期待値として「1.123456789」、「1.123457」のどちらを設定した場合も、実際の期待値には「1.123457」が使用されて判定され、結果はOKとなります。
また、出力CSVファイルの入力変数(@fin)のデータには、実際に変数に入力された値「1.123457」が出力されます。
(例)
float gb_fval; void floattest(float fin) { gb_fval = fin; }
図1:入力CSVファイル
図2:出力CSVファイル