【问题标题】:Different answers: two simple identical integer calculations?不同的答案:两个简单的相同整数计算?
【发布时间】:2012-08-12 10:04:51
【问题描述】:

下面有两种情况,操作看似相同,但产生的结果相差1。我想我不需要解释编程,很简单。

变量声明在前,场景1为1)和2 = 2),得到的结果在每个场景的最后列出。

任何帮助将不胜感激。

int intWorkingNumber = 176555;

int intHundreds = 1;

int intPower = 1;

1)

int intDeductionValue = (intHundreds * 100 * pow(1000, intPower));

intWorkingNumber -= intDeductionValue;  

intWorkingNumber = 76555

2)

intWorkingNumber -= (intHundreds * 100 * pow(1000, intPower))

intWorkingNumber = 76554

【问题讨论】:

  • '双战俘(双基数,双倍经验);' - FP 不是整数算术,所以像你这样的结果只是预期的。
  • 感谢 J Steen 编辑我的问题 - 代码的缩进格式已注明。
  • @Mark 注意最后的问号——这句话的意思是“这两个简单的相同整数计算吗?”。尽管如此,感谢您的帮助。

标签: c++ integer


【解决方案1】:

两个代码示例之间的区别在于您转换为 int 的时间。

第一个版本与此代码类似,您将其转换为整数减去:

intWorkingNumber = 176555 - (int)(1 * 100 * pow(1000, 1));

第二个版本与此类似,在您减去 之后转换为整数:

intWorkingNumber = (int)(176555 - (1 * 100 * pow(1000, 1)));

函数pow 返回一个浮点数。如果1 * 100 * pow(1000, 1) 的结果不完全等于100000.0000(并且对于浮点运算,您通常不应依赖精确结果)这两个不等价。

考虑这个更简单的例子:

x = 10 - (int)0.001;   // x = 10 - 0;     => x = 10
y = (int)(10 - 0.001); // y = (int)9.999; => y = 9

【讨论】:

  • 必须提到 pow 返回一个浮点数才有意义。
  • @DeadMG:提到了。感谢您的评论。
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 2021-04-14
  • 1970-01-01
  • 2018-04-02
  • 2022-11-29
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多