C ++のプログラム(g ++を使用してコンパイル)があります。2つのdoubleをオペランドとしてモジュラス関数に適用しようとしていますが、次のエラーが発生します。
エラー:タイプ 'double'および 'double'からバイナリ 'operator%'への無効なオペランド
これがコードです:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat詳細は素晴らしいでしょう。私はあなたが言うことを真実にさせるために舞台裏で何が起こっているかについての考えを持っていると思いますが、あなたが言うことが真実である理由を見るのは良いでしょう。それが舞台裏でどのように機能するかを見るのは興味深いでしょう(私は理解していると思いますが、非常に簡単に間違っている可能性があります)。
—
ラスタジェダイ2016年
浮動小数点値は、正確な整数の倍数または2の累乗の分数を表します。たとえば、整数リテラル0.1は正確に3602879701896397/36028797018963968です(後者の値は2の累乗です)。
—
スーパーキャット2016年
fmod(x,0.1)
数値「1/10」で除算するのではなく、xをその正確な分数で除算し、残りを取得します。
重複の可能性:係数の除算(%)が整数でのみ機能するのはなぜですか?
—
ポールR
fmod
が予期しない動作を引き起こす可能性があることを認識することが重要です。たとえば、fmod(1, 0.1);
数学的にはゼロでなければなりませんが、実際にはほぼ0.1になります。誤差の程度は、商の大きさによって増加します。たとえば、fmod(9E14, 0.1);
評価結果は約0.05です。これは、数学的な観点から言えば、間違いです。