假设每种类型都有以下类型,将 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整数运算中的除法;即任何余数都会丢失。
将任一 Aor B转换为double会导致以浮点执行操作double。(但请注意,将long long类型转换为 adouble会导致精度损失。)
请放心,C = double(B) / double(A);不会导致分段错误。在此声明之前,您必须有内存损坏/其他未定义的行为。我怀疑你搞砸了你的堆栈。
这些是整数,因此无需转换为双精度值,除非您实际上期待浮点小数结果(即您可能确实想要转换,但这与您的错无关)。
由于除以零,您很可能会遇到错误。