rt
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
double sum_sin[800005],sum_cos[800005];
int add[800005];
int a[200005];
void _Build(int k,int l,int r)
{
if(l==r)
{
sum_sin[k]=sin(a[l]);
sum_cos[k]=cos(a[l]);
return;
}
int mid=l+r>>1;
_Build(k<<1,l,mid);
_Build(k<<1|1,mid+1,r);
sum_sin[k]=sum_sin[k<<1]+sum_sin[k<<1|1];
sum_cos[k]=sum_cos[k<<1]+sum_cos[k<<1|1];
}
void addin(int k,int l,int r,int v)
{
add[k]+=v;
double temp_sin=sin(add[k]),temp_cos=cos(add[k]);
double tmp_sin=sum_sin[k],tmp_cos=sum_cos[k];
sum_sin[k]=temp_sin*tmp_cos+temp_cos*tmp_sin;
sum_cos[k]=temp_cos*tmp_cos-temp_sin*tmp_sin;
}
void push_down(int k,int l,int r,int mid)
{
if(add[k]==0) return;
addin(k<<1,l,mid,add[k]);
addin(k<<1|1,mid+1,r,add[k]);
add[k]=0;
}
double _Query(int k,int l,int r,int x,int y)
{
if(l>=x&&r<=y)
return sum_sin[k];
int mid=l+r>>1;
double res=0;
push_down(k,l,r,mid);
if(x<=mid)
res+=_Query(k<<1,l,mid,x,y);
if(mid<y)
res+=_Query(k<<1|1,mid+1,r,x,y);
return res;
}
void _Update(int k,int l,int r,int x,int y,int v,double sinv,double cosv)
{
if(l>=x&&r<=y)
{
add[k]+=v;
double tmp_sin=sum_sin[k],tmp_cos=sum_cos[k];
sum_sin[k]=sinv*tmp_cos+cosv*tmp_sin;
sum_cos[k]=cosv*tmp_cos-sinv*tmp_sin;
return;
}
int mid=l+r>>1;
push_down(k,l,r,mid);
if(x<=mid)
_Update(k<<1,l,mid,x,y,v,sinv,cosv);
if(mid<y)
_Update(k<<1|1,mid+1,r,x,y,v,sinv,cosv);
sum_sin[k]=sum_sin[k<<1]+sum_sin[k<<1|1];
sum_cos[k]=sum_cos[k<<1]+sum_cos[k<<1|1];
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
_Build(1,1,n);
scanf("%lld",&m);
for(int i=1;i<=m;i++)
{
int op,x,y,z;
scanf("%lld%lld%lld",&op,&x,&y);
if(!(op^1))
{
scanf("%lld",&z);
_Update(1,1,n,x,y,z,sin(z),cos(z));
}
else
printf("%.1lf\n",_Query(1,1,n,x,y));
}
return 0;
}