gpt4 book ai didi

c++ - 与其他几个具有相同输入的编译器相比,在 Xcode 中编译的代码给出了不正确的(?)输入

转载 作者:行者123 更新时间:2023-11-28 04:25:02 24 4
gpt4 key购买 nike

Xcode(不正确)和其他(基于网络的编译器)的测试输入和输出如下:

输入 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:10 100 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++ 编译器(和标准库)之间 srandrand 的不同实现所致。

Xcode 使用默认为 libc++ 的 Clang,而您的其他编译器可能使用 GCC,它使用 libstdc++。 Microsoft Visual Studio 编译器也有自己的实现。通常,您不能相信这些实现是平等的。

您的选择是创建自己的伪随机数生成器 (PRNG) 或使用内置的 Mersenne twister generator std::mt19937。这应该会在各个平台上产生相同的结果。

关于c++ - 与其他几个具有相同输入的编译器相比,在 Xcode 中编译的代码给出了不正确的(?)输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54528767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com