ceiling.cpp 591 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "stdafx.h"
  2. #include "defs.h"
  3. void
  4. eval_ceiling(void)
  5. {
  6. push(cadr(p1));
  7. eval();
  8. ceiling();
  9. }
  10. void
  11. ceiling(void)
  12. {
  13. save();
  14. yyceiling();
  15. restore();
  16. }
  17. void
  18. yyceiling(void)
  19. {
  20. double d;
  21. p1 = pop();
  22. if (!isnum(p1)) {
  23. push_symbol(CEILING);
  24. push(p1);
  25. list(2);
  26. return;
  27. }
  28. if (isdouble(p1)) {
  29. d = ceil(p1->u.d);
  30. push_double(d);
  31. return;
  32. }
  33. if (isinteger(p1)) {
  34. push(p1);
  35. return;
  36. }
  37. p3 = alloc();
  38. p3->k = NUM;
  39. p3->u.q.a = mdiv(p1->u.q.a, p1->u.q.b);
  40. p3->u.q.b = mint(1);
  41. push(p3);
  42. if (isnegativenumber(p1))
  43. ;
  44. else {
  45. push_integer(1);
  46. add();
  47. }
  48. }