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