_random.c 765 B

1234567891011121314151617181920212223242526272829303132
  1. #include "_random.h"
  2. #include <stdlib.h>
  3. #include <time.h>
  4. void _random___init__(PikaObj* self) {
  5. srand(pika_platform_get_tick());
  6. }
  7. int _random_randint(PikaObj* self, int a, int b) {
  8. return rand() % (b - a + 1) + a;
  9. }
  10. pika_float _random_random(PikaObj* self) {
  11. return rand() / (pika_float)RAND_MAX;
  12. }
  13. int _random_randrange(PikaObj* self, int start, int stop, int step) {
  14. if (step == 0) {
  15. return _random_randint(self, start, stop);
  16. }
  17. int n = (stop - start + step) / step;
  18. int r = _random_randint(self, 0, n - 1);
  19. return start + r * step;
  20. }
  21. void _random_seed(PikaObj* self, int a) {
  22. srand(a);
  23. }
  24. pika_float _random_uniform(PikaObj* self, pika_float a, pika_float b) {
  25. return (b - a) * _random_random(self) + a;
  26. }