【问题标题】:C++ Floating Point Exception with large files大文件的 C++ 浮点异常
【发布时间】:2017-09-14 14:00:15
【问题描述】:

在使用大量数据(大约 2MB)执行以下代码时,我在第 21 行收到一个浮点异常。

    #include <bits/stdc++.h>
using namespace std;


int main() {
    std::ios_base::sync_with_stdio(false);
    int S, Q, type, seq, pos;
    int x, y, lastAnswer = 0;
    cin >> S >> Q;
    vector< vector <int> > seqList(S);

    for(int i=0; i<Q; i++){
        cin >> type >> x >> y;
        if( type == 1 ){
            seq = (x^lastAnswer) % S;
            seqList[seq].push_back(y);
            if(seq == 0) lastAnswer = 0;
        }
        else if( type == 2 ){
            seq = (x^lastAnswer) % S;
            pos = (int)(y % seqList[seq].size()); //Line 21
            lastAnswer = seqList[seq][pos];
            cout << lastAnswer << endl;
        }
    }

    return 0;
}

【问题讨论】:

标签: c++ error-handling floating-point


【解决方案1】:
pos = (int)(y % seqList[seq].size()); //Line 21

seqList[seq].size()0@Lưu Vĩnh Phúc

对于a%b,如果b == 0 则未定义行为。当尝试进行 整数 除法或 % 除以零时,许多平台会报告 浮点 异常。

重写以检测何时seqList[seq].size() == 0

还要检查S == 0,因为它与(x^lastAnswer) % S 一起使用@Jeremy Friesner

【讨论】:

  • 如果 S 被读为零,看起来同样的问题会发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多