用unsigned long long划分unsigned long int的最安全的方法

时间:2013-10-16 21:19:09

标签: c++ division

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

unsigned long long A;
unsigned long int B;

我已经使用以下行来执行此操作。它运行正常,但有时它会因分段错误而失败。

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

由于

2 个答案:

答案 0 :(得分:4)

(首先,unsigned long intunsigned long

相同

数据类型提升规则意味着在评估A / B时,B被提升为unsigned long long,并且除法以整数算术执行;即任何遗失都会丢失。

or B投射到double会导致操作以浮点double执行。 (但请注意,将long long类型转换为double会导致精度损失。)

请放心,C = double(B) / double(A); 会导致细分错误。在此语句之前,您必须具有内存损坏/其他未定义的行为。我怀疑你搞砸了你的筹码。

答案 1 :(得分:2)

这些是整数,所以不需要强制转换为双精度,除非你实际上期望浮点小数结果(即你可能想要投射,但这与你的错无关)。

由于除以零,你很可能会收到错误。