![](/img/trans.png)
[英]VS code showing error in c++ code which is working absolutely fine on online compilers and Xcode
[英]Code compiled in Xcode gives an incorrect(?) input vs several other compilers with same inputs
Xcode(不正确)和其他(基于Web的编译器)的测试输入和输出如下:
输入1:3 30 0.90 40
Xcode输出1:可接受的成功率:0.90
平均尝试销售:30.00
平均完成销售额:19.33
观察成功率:0.64
观察到的成功率不在可接受的范围内。
程序以退出代码结束:0
其他编译器的输出1(正确):可接受的成功率:0.90
平均尝试销售:30.00
平均完成销售额:19.67
观察成功率:0.66
观察到的成功率不在可接受的范围内。
输入2:10100 0.5 1
Xcode输出2:可接受的成功率:0.50
平均尝试销售:100.00
平均完成销售额:29.40
观察成功率:0.29
观察到的成功率不在可接受的范围内。
程序以退出代码结束:0
其他编译器的输出1(正确):可接受的成功率:0.50
平均尝试销售:100.00
平均完成销售额:28.80
观察成功率:0.29
观察到的成功率不在可接受的范围内。
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
int main()
{
int iterations, seed;
double successRate;
float completedSales = 0, numAttempted;
int i, t;
int seatChoice;
//Add other variables necessary for your program
//cout << "Please enter number of iterations to be evaluated" <<endl;
cin >> iterations; //number of iterations to be evaluated
//cout << "Please enter number of attempted sales" <<endl;
cin >> numAttempted; //number of attempted sales
//cout << "Please enter expected success rate" <<endl;
cin >> successRate;
//cout << "Please enter seed for random number generation" <<endl;
cin >> seed; //seed for random number generation
//Validate input
if(iterations <= 0 || numAttempted < 0 || seed < 0 ) {
cout << "Error. Invalid parameters.";
}
else if(successRate < 0 || successRate > 1) {
cout << "Error. Invalid parameters.";
}
else {
//Set seed and start iterations
srand(seed);
//Every iteration of the simulation starts by setting all seats to empty
for(i = 0; i < iterations; ++i) {
int availableSeats[30] = {0};
for(t = 0; t < numAttempted; ++t) {
seatChoice = (rand() % 30);
if(availableSeats[seatChoice] == 0) {
availableSeats[seatChoice] = 1.0;
completedSales++;
}
}
}
float averageSales = (float) completedSales/iterations;
float observedSuccessRate = (float) averageSales/numAttempted;
//Complete final output:
cout << setprecision(2) <<fixed;
cout << "Acceptable success rate: " <<successRate <<endl;
cout << "Average attempted sales: " <<(double)numAttempted <<endl;
cout << "Average completed sales: " <<averageSales <<endl;
cout << "Observed success rate: " <<(float)observedSuccessRate <<endl;
//Complete if statement to test success rate
if(observedSuccessRate < successRate) {
cout << "Observed success rate not in acceptable range." << endl;
}
else {
cout << "Observed success rate is acceptable." << endl;
}
}
return 0;
}
重新读取您的代码后,“错误”行为是否就是给定相同种子的不同结果? 这可能是由于C ++编译器(和标准库)之间对srand
和rand
实现不同。
Xcode使用Clang(默认为libc ++),而其他编译器可能使用GCC(使用lib std c ++)。 Microsoft Visual Studio编译器也有自己的实现。 通常,您不能依靠这些实现方式相等。
您可以选择创建自己的伪随机数生成器(PRNG)或使用内置的梅森扭曲器生成器 std::mt19937
。 跨平台应该会产生相同的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.