好奇的分裂结果

时间:2014-01-22 00:58:33

标签: c++

这段代码怎么样......

vector<double> _pc;
vector<int> _documentClassIds;

[...]

someMemberFunction(vector<int> const & documentIds) {

  cout << "_pc[0] = "<< _pc[0]<<endl;
  cout << "_pc[1] = "<< _pc[1]<<endl;
  cout << "documentIds.size() = " << documentIds.size()<<endl;

  // Normalize
  for (auto documentId : documentIds)
    _pc[_documentClassIds[documentId]] =
    _pc[_documentClassIds[documentId]] / documentIds.size();
  cout << "_pc[0] = "<< _pc[0]<<endl;
  cout << "_pc[1] = "<< _pc[1]<<endl;
}

产生这个输出?

_pc[0] = 3
_pc[1] = 3
documentIds.size() = 6
_pc[0] = 0.0138889
_pc[1] = 0.0138889

1 个答案:

答案 0 :(得分:5)

我不确定你认为问题是什么。

您有六个文档ID,因此您的for循环运行六次。每次运行时,它会将您的_pc数组值之一除以6。

由于0.0138888...是3除以216(6 ^ 3),因此计算似乎是正确的。

很明显,选择哪个_pc数组条目进行划分是同等分配的,以便每个条目分为三次,因此每个条目最终都是:

(((3 / 6) / 6) / 6) => 0.013888...