B を A で除算する最も安全な方法は次のとおりです。
unsigned long long A;
unsigned long int B;
私はすでにそれを行うために次の行を使用しています。正常に動作しますが、セグメンテーション違反で失敗することがあります。
double C;
C= double(B)/double(A);
ありがとう
(まず、unsigned long intは と同じですunsigned long)
データ型昇格規則は、 を評価するときにA / B、Bが昇格されunsigned long long、除算が整数演算で実行されることを意味します。つまり、残りは失われます。
or Bいずれかの Aをキャストするdoubleと、演算が浮動小数点で実行されますdouble。(ただし、long long型を にキャストするとdouble、精度が失われる可能性があることに注意してください。)
セグメンテーション違反C = double(B) / double(A);にはなりませんのでご安心ください。このステートメントの前に、メモリ破損/その他の未定義の動作が発生している必要があります。スタックを台無しにしたと思われます。
これらは int であるため、浮動小数点の小数の結果が実際に期待される場合を除き、double にキャストする必要はありません (つまり、おそらくキャストしたいのですが、それはあなたの過失とは関係ありません)。
ゼロ除算が原因でエラーが発生する可能性が高くなります。