誰もがパスカルを忘れましたか?
1/6
yields 0.1666666...
(サポートされている精度にかかわらず)。
1 div 6
利回り 0
Cルールが間違いであるかどうかは議論の余地があります。オペランドが同じ型であるCのほぼすべての算術演算子は、同じ型の結果を生成します。一貫性のために言わなければならないことがあります。
さらに、Cは主にシステムレベルのコードを対象としているため、ほとんどのCプログラムは浮動小数点をまったく使用しません。一時的に、浮動小数点コードを必要としないプログラムに誤って追加してしまうと、深刻な問題になる可能性がありました。小規模な組み込みシステムの場合は、おそらくまだそうです。これも、Cの主要なターゲットです。
ほとんどのCプログラムでは、整数除算を切り捨てることはおそらくとにかく必要なことです。
1 / 6
Cで浮動小数点の結果が得られた場合:
- それは言語の矛盾です。
- 標準では、結果に使用する浮動小数点型を任意に選択する必要があります(
double
自然な選択のように見えるかもしれませんが、の追加の精度を好むかもしれませんlong double
)
- 言語はなりまだ整数除算のための操作を持っている必要があります。浮動小数点の加算を実行してから切り捨てることは、おそらく十分ではありません。
C は 2種類の除算に別々の演算子を提供できますが、上記の2番目の点は引き続き適用されます。3つの浮動小数点型のどれが結果に使用されますか?必要に応じて浮動小数点除算を取得するのは簡単なので(一方または両方のオペランドに浮動小数点定数を使用するか、一方または両方のオペランドを浮動小数点型にキャストします)、明らかにそうではありませんでしたtはそれを重要だと考えました。
1974年版のCマニュアル(K&Rの初版が発行される4年前)では、リッチーは混乱の可能性についても言及していません。
バイナリ/演算子は除算を示します。乗算と同じタイプの考慮事項が適用されます
これは、両方のオペランドがint
orであるchar
場合、結果はtypeであると言いますint
。
はい、一部のCプログラマ、特に初心者にとっては混乱の元になりますが、Cは初心者に優しいことで知られていません。