整数の精度を超過しました
精度の代わりに整数サイズを使用する操作により発生する可能性のある未定義の動作
説明
この欠陥は、演算の整数式で整数精度を超える整数サイズが使用された場合に発生します。一部のアーキテクチャでは、メモリ内の整数サイズに符号とパディング ビットが含まれることがあります。これらのアーキテクチャでは、整数の値相当のビット数にすぎない精度よりも整数サイズの方が大きくなります。
リスク
整数の精度に対する演算に整数サイズを使用すると、整数オーバーフロー、ラップ アラウンド、または予期しない結果を引き起こす可能性があります。たとえば、符号なし整数は 64 ビットのメモリに格納できますが、その値を表現するには 48 ビットのみを使用します。この整数に対する 56 ビット左シフト演算は未定義の動作です。
整数のサイズがその精度と等しいと仮定すると、異なるアーキテクチャ間でプログラム移植性の問題が発生する場合もあります。
修正方法
整数のサイズをその精度の代わりに使用しないようにします。整数の精度を求めるには、精度計算ルーチンを実装するか、__builtin_popcount()
などの組み込み関数を使用します。
例
結果情報
グループ: 数値 |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: INT_PRECISION_EXCEEDED |
影響度: Low |
バージョン履歴
R2018b で導入