#include #include typedef double R; int main(int argc, char * * argv){ if(argc != 3) exit(printf("2 args, not %d\n", argc-1)); R f1 = atof(argv[1]), f0 = 1.-f1, w = f0, a = 0; {char * e = argv[2]; while(*e) {if(*e == '1') {a+=w; w *= f1;} else w *= f0; ++e;}} printf("%19.16f w=%e\n", a, w); return 0;} /* gcc a.c -Wall ./a.out 0.3333333333333333333 01000101001011011000000010000100100000110110100000001000011 0.5000000000000000 w=5.187457e-17 */