weiner.c 966 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <openssl/x509.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include "questions.h"
  5. #include "weiner.h"
  6. int wiener_question_setup(void) { return 0; }
  7. int wiener_question_teardown(void) { return 0; }
  8. int wiener_question_test(X509* cert) { return 1; }
  9. void cfrac_init(struct cf* f, double x)
  10. {
  11. f->fs[0].h = 0;
  12. f->fs[0].k = 1;
  13. f->fs[1].h = 1;
  14. f->fs[1].k = 0;
  15. f->i = 2;
  16. f->x = x;
  17. }
  18. struct fraction cfrac_next(struct cf* f)
  19. {
  20. long a = lrint(floor(f->x));
  21. struct fraction ith_cf, *fs = f->fs;
  22. ith_cf.h = fs[f->i%3].h = a*fs[(f->i-1)%3].h + fs[(f->i-2)%3].h;
  23. ith_cf.k = fs[f->i%3].k = a*fs[(f->i-1)%3].k + fs[(f->i-2)%3].k;
  24. f->x = 1./(f->x-a);
  25. f->i = (f->i+1) % 3;
  26. return ith_cf;
  27. }
  28. int wiener_question_ask(X509* cert)
  29. {
  30. return 0;
  31. }
  32. struct qa_question WienerQuestion = {
  33. .name = "Wiener",
  34. .setup = wiener_question_setup,
  35. .teardown = wiener_question_teardown,
  36. .test = wiener_question_test,
  37. .ask = wiener_question_ask
  38. };