0

假设每种类型都有以下类型,将 B 除以 A 的最安全方法是什么?

unsigned long long A;
unsigned long int B;

我已经在使用以下行来做到这一点。它工作正常,但是,有时它会因分段错误而失败。

double C;
C= double(B)/double(A);

谢谢

4

2 回答 2

4

(首先,unsigned long int与 相同unsigned long

数据类型提升规则是指在求值时A / BB提升为unsigned long long整数运算中的除法;即任何余数都会丢失。

将任一 Aor B转换为double会导致以浮点执行操作double。(但请注意,将long long类型转换为 adouble会导致精度损失。)

请放心,C = double(B) / double(A);不会导致分段错误在此声明之前,您必须有内存损坏/其他未定义的行为。我怀疑你搞砸了你的堆栈。

于 2013-10-16T21:29:09.657 回答
2

这些是整数,因此无需转换为双精度值,除非您实际上期待浮点小数结果(即您可能确实想要转换,但这与您的错无关)。

由于除以零,您很可能会遇到错误。

于 2013-10-16T21:28:38.040 回答