所以,我们不必遍历两遍数组,只需要遍历一遍就好了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
unsigned long long seed;
long double gen()
{
static const long double Z = ( long double )1.0 / (1LL<<32);
seed >>= 16;
seed &= ( 1ULL << 32 ) - 1;
seed *= seed;
return seed * Z;
}
/*
Codeblocks:
可以输入%Lf,立刻输出结果正确,但放到后面结果就不对了
启示:
不能printf输出long double类型,一旦涉及到long double
考虑cout输出中间值
Dev:
不存在什么问题
c++格式输出:
https://blog.csdn.net/u011321546/article/details/9293547
https://blog.csdn.net/dongfengkuayue/article/details/21229307
*/
const int maxn=1e7+10;
long double val[maxn];
int main()
{
ios::sync_with_stdio(false);
int T;
cin>>T;
//scanf("%d",&T);
for(int kase=1;kase<=T;kase++){
int n;
cin>>n>>seed;
//scanf("%d%llu",&n,&seed);
long double sum=0,ans=0;
rep(i,0,n){
val[i]=gen();
sum+=val[i];
}
sum/=1.0*n;
rep(i,0,n) ans+=(val[i]-sum)*(val[i]-sum);
ans/=1.0*n;
ans=sqrt(ans);
cout<<"Case #"<<kase<<':'<<' '<<fixed<<setprecision(5)<<ans<<endl;
//cout输出小数点后几位 fixed+setprecision
//printf("Case #%d: %Lf\n",kase,ans);
}
return 0;
}