メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

科学表記形式が無効です

無効な形式を使用するとコードの可読性が低くなる

R2022b 以降

説明

この問題は、浮動小数点リテラルを指数形式で表しているのに、小数点の前に 1 つの非ゼロの数字がある、標準の科学表記形式を使用していない場合に発生します。

Polyspace® は、指数形式のリテラル 0.0 を表すための小数点より前のゼロの使用 (たとえば、0.00E+0) にはフラグを設定しません。

リスク

非標準の科学表記を使用してリテラルを表すと、コードの可読性が低くなり、エラーが発生しやすくなります。

修正方法

小数点より前に 1 つの非ゼロの数字がある標準の形式を使用して、浮動小数点リテラルを科学表記で表します。

すべて展開する

#include <stdio.h>

void printUsingEFormat()
{
	float literalVals[] = {
		1154.12e+5L, //more than one digit before decimal
		.1E4F,       //no digit before decimal
		58.L,
		0.1E4F,     //zero digit before decimal
		1.34e+4,
		13.4e+3,    //more than one digit before decimal
		0.0000E+0,
		0xa.bp10l,
		0x15.0p5};
	for (int i = 0;
		 i < sizeof(literalVals) / sizeof(literalVals[0]);
		 ++i)
	{
		printf("%.6e\n", literalVals[i]);
	}
}

この例では、関数 printUsingEFormat() が配列 literalVals の各要素を順番に取得して、各要素を科学表記形式で出力します。

Polyspace は、標準の科学表記形式を使用していないすべてのリテラルにフラグを設定します。他の配列要素は、正しい形式を使用しているか、科学表記を使用して表されていません。

結果情報

グループ: 適切な手法
言語: C | C++
既定値: オフ
コマンド ライン構文: INVALID_NOTATION_ON_E_CONSTANT
影響度: Low

バージョン履歴

R2022b で導入