# include <stdio.h>
# include <math.h>
const int i_Initial = 1 ;
const int i_Final = 15 ;
double si_Formula( int i ){
return (
)/( 1-16e-17 ) ;
}
int main(){
double Si_Infinite=0 , Sip1=0 , Si=Sip1-si_Formula(i_Initial-1) , Sim1=Si-si_Formula(i_Initial-2) ;
for( int i=i_Final+999 ; i>=i_Initial ; i-- ) Si_Infinite+=si_Formula(i) ;
for( int i=i_Initial-1 ;;){
# define Abs(x) ((x)<0?-(x):(x))
# define Max(x,y) ((x)>(y)?(x):(y))
double Sip1_Error = Abs(Sip1-Si_Infinite)/(Max(Sip1,Si_Infinite)+5e-324) ;
double Expected_Si_Infinite = Sip1-( Sip1-Si )*( Sip1-Si )/( Sip1+Sim1-Si-Si ) ;
double Expected_Si_Infinite_Error = Abs(Expected_Si_Infinite-Si_Infinite)/(Max(Expected_Si_Infinite,Si_Infinite)+5e-324) ;
printf( "S_%03i =%12.9lf (%.2e) | DeltaSquared S_%03i =%12.9lf (%.2e)" , i+1
, Sip1
, Sip1_Error
, i+1
, Expected_Si_Infinite
, Expected_Si_Infinite_Error
) ;
if( ++i
> i_Final
){ printf(" S_Inf = %.16lf",Si_Infinite
) ; return 0 ; } double si = si_Formula(i) ;
Sim1=Si , Si=Sip1 , Sip1+=si ;
printf( " |--> s%03i =%14.11lf\n" , i
, si
) ; }
}
IyBpbmNsdWRlIDxzdGRpby5oPgojIGluY2x1ZGUgPG1hdGguaD4KIAogCiAKY29uc3QgaW50ICAgICBpX0luaXRpYWwgICAgPSAxIDsKY29uc3QgaW50ICAgICBpX0ZpbmFsICAgICAgPSAxNSA7CiAKZG91YmxlIHNpX0Zvcm11bGEoIGludCBpICl7CiAgICByZXR1cm4gKAogICAgCQk4OC4vNjAqcG93KDAuMTIsaSkgKwogICAgCQk4OS4vNTUqcG93KDAuMTEsaSkgKwogICAgCQk5MC4vNTAqcG93KDAuMTAsaSkgKwogICAgCQk5MS4vNDUqcG93KDAuMDksaSkgKwogICAgCQk5Mi4vNDAqcG93KDAuMDgsaSkKCQkpLyggMS0xNmUtMTcgKSA7Cn0KIAogCiAKaW50IG1haW4oKXsKICAgIGRvdWJsZSBTaV9JbmZpbml0ZT0wICwgU2lwMT0wICwgU2k9U2lwMS1zaV9Gb3JtdWxhKGlfSW5pdGlhbC0xKSAsIFNpbTE9U2ktc2lfRm9ybXVsYShpX0luaXRpYWwtMikgOwogICAgZm9yKCBpbnQgaT1pX0ZpbmFsKzk5OSA7IGk+PWlfSW5pdGlhbCA7IGktLSApIFNpX0luZmluaXRlKz1zaV9Gb3JtdWxhKGkpIDsKICAgIGZvciggaW50IGk9aV9Jbml0aWFsLTEgOzspewogICAgICAgICMgZGVmaW5lIEFicyh4KSAgICgoeCk8MD8tKHgpOih4KSkKICAgICAgICAjIGRlZmluZSBNYXgoeCx5KSAoKHgpPih5KT8oeCk6KHkpKQogICAgICAgIGRvdWJsZSBTaXAxX0Vycm9yID0gQWJzKFNpcDEtU2lfSW5maW5pdGUpLyhNYXgoU2lwMSxTaV9JbmZpbml0ZSkrNWUtMzI0KSA7CiAgICAgICAgZG91YmxlIEV4cGVjdGVkX1NpX0luZmluaXRlID0gU2lwMS0oIFNpcDEtU2kgKSooIFNpcDEtU2kgKS8oIFNpcDErU2ltMS1TaS1TaSAgKSA7CiAgICAgICAgZG91YmxlIEV4cGVjdGVkX1NpX0luZmluaXRlX0Vycm9yID0gQWJzKEV4cGVjdGVkX1NpX0luZmluaXRlLVNpX0luZmluaXRlKS8oTWF4KEV4cGVjdGVkX1NpX0luZmluaXRlLFNpX0luZmluaXRlKSs1ZS0zMjQpIDsKICAgICAgICBwcmludGYoICJTXyUwM2kgPSUxMi45bGYgKCUuMmUpICB8ICBEZWx0YVNxdWFyZWQgU18lMDNpID0lMTIuOWxmICglLjJlKSIKICAgICAgICAgICAgICAgICwgaSsxCiAgICAgICAgICAgICAgICAsIFNpcDEKICAgICAgICAgICAgICAgICwgU2lwMV9FcnJvcgogICAgICAgICAgICAgICAgLCBpKzEKICAgICAgICAgICAgICAgICwgRXhwZWN0ZWRfU2lfSW5maW5pdGUKICAgICAgICAgICAgICAgICwgRXhwZWN0ZWRfU2lfSW5maW5pdGVfRXJyb3IKICAgICAgICAgICAgKSA7CiAgICAgICAgaWYoICsraSA+IGlfRmluYWwgKXsgcHJpbnRmKCIgIFNfSW5mID0gJS4xNmxmIixTaV9JbmZpbml0ZSkgOyByZXR1cm4gMCA7IH0KICAgICAgICBkb3VibGUgc2kgPSBzaV9Gb3JtdWxhKGkpIDsKICAgICAgICBTaW0xPVNpICwgU2k9U2lwMSAsIFNpcDErPXNpIDsKICAgICAgICBwcmludGYoICIgIHwtLT4gIHMlMDNpID0lMTQuMTFsZlxuIiAsIGkgLCBzaSApIDsKICAgIH0KfQ==