20
20
#include "stdlib/math/base/special/sqrt.h"
21
21
#include "stdlib/math/base/special/floor.h"
22
22
#include "stdlib/constants/float64/max_safe_integer.h"
23
+ #include "stdlib/math/base/special/fmod.h"
23
24
#include <stdint.h>
24
- #include <math.h>
25
25
26
26
static const double WHEEL_PRIMES [45 ] = {
27
27
11.0 , 13.0 , 17.0 , 19.0 , 23.0 , 29.0 , 31.0 , 37.0 , 41.0 , 43.0 , 47.0 , 53.0 , 59.0 , 61.0 , 67.0 , 71.0 , 73.0 , 79.0 , 83.0 , 89.0 , 97.0 ,
@@ -54,23 +54,23 @@ bool stdlib_base_is_prime( const double x ) {
54
54
return ( x > 1.0 ); // primes: 2.0, 3.0
55
55
}
56
56
// Check whether the number is even...
57
- if ( x > STDLIB_CONSTANT_FLOAT64_MAX_SAFE_INTEGER || ( fmod ( x , 2.0 ) ) == 0.0 ) {
57
+ if ( x > STDLIB_CONSTANT_FLOAT64_MAX_SAFE_INTEGER || ( stdlib_base_fmod ( x , 2.0 ) ) == 0.0 ) {
58
58
return false;
59
59
}
60
60
// Check for small primes...
61
61
if ( x < 9.0 ) {
62
62
return true; // primes: 5.0, 7.0
63
63
}
64
64
// Check whether the number is evenly divisible by `3`...
65
- if ( fmod ( x , 3.0 ) == 0.0 ) { // TODO: replace fmod usage once we have a stdlib equivalent
65
+ if ( stdlib_base_fmod ( x , 3.0 ) == 0.0 ) {
66
66
return false;
67
67
}
68
68
// Check whether the number is evenly divisible by `5`...
69
- if ( fmod ( x , 5.0 ) == 0.0 ) {
69
+ if ( stdlib_base_fmod ( x , 5.0 ) == 0.0 ) {
70
70
return false;
71
71
}
72
72
// Check whether the number is evenly divisible by `7`...
73
- if ( fmod ( x , 7.0 ) == 0.0 ) {
73
+ if ( stdlib_base_fmod ( x , 7.0 ) == 0.0 ) {
74
74
return false;
75
75
}
76
76
// Check whether the number is a prime number in the wheel...
@@ -83,54 +83,54 @@ bool stdlib_base_is_prime( const double x ) {
83
83
N = stdlib_base_floor ( stdlib_base_sqrt ( x ) );
84
84
for ( i = 11 ; i <= N ; i += 210 ) {
85
85
if (
86
- fmod ( x , i ) == 0.0 || // 11
87
- fmod ( x , ( i + 2 ) ) == 0.0 || // 13
88
- fmod ( x , ( i + 6 ) ) == 0.0 || // 17
89
- fmod ( x , ( i + 8 ) ) == 0.0 || // 19
90
- fmod ( x , ( i + 12 ) ) == 0.0 || // 23
91
- fmod ( x , ( i + 18 ) ) == 0.0 || // 29
92
- fmod ( x , ( i + 20 ) ) == 0.0 || // 31
93
- fmod ( x , ( i + 26 ) ) == 0.0 || // 37
94
- fmod ( x , ( i + 30 ) ) == 0.0 || // 41
95
- fmod ( x , ( i + 32 ) ) == 0.0 || // 43
96
- fmod ( x , ( i + 36 ) ) == 0.0 || // 47
97
- fmod ( x , ( i + 42 ) ) == 0.0 || // 53
98
- fmod ( x , ( i + 48 ) ) == 0.0 || // 59
99
- fmod ( x , ( i + 50 ) ) == 0.0 || // 61
100
- fmod ( x , ( i + 56 ) ) == 0.0 || // 67
101
- fmod ( x , ( i + 60 ) ) == 0.0 || // 71
102
- fmod ( x , ( i + 62 ) ) == 0.0 || // 73
103
- fmod ( x , ( i + 68 ) ) == 0.0 || // 79
104
- fmod ( x , ( i + 72 ) ) == 0.0 || // 83
105
- fmod ( x , ( i + 78 ) ) == 0.0 || // 89
106
- fmod ( x , ( i + 86 ) ) == 0.0 || // 97
107
- fmod ( x , ( i + 90 ) ) == 0.0 || // 101
108
- fmod ( x , ( i + 92 ) ) == 0.0 || // 103
109
- fmod ( x , ( i + 96 ) ) == 0.0 || // 107
110
- fmod ( x , ( i + 98 ) ) == 0.0 || // 109
111
- fmod ( x , ( i + 102 ) ) == 0.0 || // 113
112
- fmod ( x , ( i + 110 ) ) == 0.0 || // 121 (relatively prime)
113
- fmod ( x , ( i + 116 ) ) == 0.0 || // 127
114
- fmod ( x , ( i + 120 ) ) == 0.0 || // 131
115
- fmod ( x , ( i + 126 ) ) == 0.0 || // 137
116
- fmod ( x , ( i + 128 ) ) == 0.0 || // 139
117
- fmod ( x , ( i + 132 ) ) == 0.0 || // 143 (relatively prime)
118
- fmod ( x , ( i + 138 ) ) == 0.0 || // 149
119
- fmod ( x , ( i + 140 ) ) == 0.0 || // 151
120
- fmod ( x , ( i + 146 ) ) == 0.0 || // 157
121
- fmod ( x , ( i + 152 ) ) == 0.0 || // 163
122
- fmod ( x , ( i + 156 ) ) == 0.0 || // 167
123
- fmod ( x , ( i + 158 ) ) == 0.0 || // 169 (relatively prime)
124
- fmod ( x , ( i + 162 ) ) == 0.0 || // 173
125
- fmod ( x , ( i + 168 ) ) == 0.0 || // 179
126
- fmod ( x , ( i + 170 ) ) == 0.0 || // 181
127
- fmod ( x , ( i + 176 ) ) == 0.0 || // 187 (relatively prime)
128
- fmod ( x , ( i + 180 ) ) == 0.0 || // 191
129
- fmod ( x , ( i + 182 ) ) == 0.0 || // 193
130
- fmod ( x , ( i + 186 ) ) == 0.0 || // 197
131
- fmod ( x , ( i + 188 ) ) == 0.0 || // 199
132
- fmod ( x , ( i + 198 ) ) == 0.0 || // 209 (relatively prime)
133
- fmod ( x , ( i + 200 ) ) == 0.0 // 211
86
+ stdlib_base_fmod ( x , i ) == 0.0 || // 11
87
+ stdlib_base_fmod ( x , ( i + 2 ) ) == 0.0 || // 13
88
+ stdlib_base_fmod ( x , ( i + 6 ) ) == 0.0 || // 17
89
+ stdlib_base_fmod ( x , ( i + 8 ) ) == 0.0 || // 19
90
+ stdlib_base_fmod ( x , ( i + 12 ) ) == 0.0 || // 23
91
+ stdlib_base_fmod ( x , ( i + 18 ) ) == 0.0 || // 29
92
+ stdlib_base_fmod ( x , ( i + 20 ) ) == 0.0 || // 31
93
+ stdlib_base_fmod ( x , ( i + 26 ) ) == 0.0 || // 37
94
+ stdlib_base_fmod ( x , ( i + 30 ) ) == 0.0 || // 41
95
+ stdlib_base_fmod ( x , ( i + 32 ) ) == 0.0 || // 43
96
+ stdlib_base_fmod ( x , ( i + 36 ) ) == 0.0 || // 47
97
+ stdlib_base_fmod ( x , ( i + 42 ) ) == 0.0 || // 53
98
+ stdlib_base_fmod ( x , ( i + 48 ) ) == 0.0 || // 59
99
+ stdlib_base_fmod ( x , ( i + 50 ) ) == 0.0 || // 61
100
+ stdlib_base_fmod ( x , ( i + 56 ) ) == 0.0 || // 67
101
+ stdlib_base_fmod ( x , ( i + 60 ) ) == 0.0 || // 71
102
+ stdlib_base_fmod ( x , ( i + 62 ) ) == 0.0 || // 73
103
+ stdlib_base_fmod ( x , ( i + 68 ) ) == 0.0 || // 79
104
+ stdlib_base_fmod ( x , ( i + 72 ) ) == 0.0 || // 83
105
+ stdlib_base_fmod ( x , ( i + 78 ) ) == 0.0 || // 89
106
+ stdlib_base_fmod ( x , ( i + 86 ) ) == 0.0 || // 97
107
+ stdlib_base_fmod ( x , ( i + 90 ) ) == 0.0 || // 101
108
+ stdlib_base_fmod ( x , ( i + 92 ) ) == 0.0 || // 103
109
+ stdlib_base_fmod ( x , ( i + 96 ) ) == 0.0 || // 107
110
+ stdlib_base_fmod ( x , ( i + 98 ) ) == 0.0 || // 109
111
+ stdlib_base_fmod ( x , ( i + 102 ) ) == 0.0 || // 113
112
+ stdlib_base_fmod ( x , ( i + 110 ) ) == 0.0 || // 121 (relatively prime)
113
+ stdlib_base_fmod ( x , ( i + 116 ) ) == 0.0 || // 127
114
+ stdlib_base_fmod ( x , ( i + 120 ) ) == 0.0 || // 131
115
+ stdlib_base_fmod ( x , ( i + 126 ) ) == 0.0 || // 137
116
+ stdlib_base_fmod ( x , ( i + 128 ) ) == 0.0 || // 139
117
+ stdlib_base_fmod ( x , ( i + 132 ) ) == 0.0 || // 143 (relatively prime)
118
+ stdlib_base_fmod ( x , ( i + 138 ) ) == 0.0 || // 149
119
+ stdlib_base_fmod ( x , ( i + 140 ) ) == 0.0 || // 151
120
+ stdlib_base_fmod ( x , ( i + 146 ) ) == 0.0 || // 157
121
+ stdlib_base_fmod ( x , ( i + 152 ) ) == 0.0 || // 163
122
+ stdlib_base_fmod ( x , ( i + 156 ) ) == 0.0 || // 167
123
+ stdlib_base_fmod ( x , ( i + 158 ) ) == 0.0 || // 169 (relatively prime)
124
+ stdlib_base_fmod ( x , ( i + 162 ) ) == 0.0 || // 173
125
+ stdlib_base_fmod ( x , ( i + 168 ) ) == 0.0 || // 179
126
+ stdlib_base_fmod ( x , ( i + 170 ) ) == 0.0 || // 181
127
+ stdlib_base_fmod ( x , ( i + 176 ) ) == 0.0 || // 187 (relatively prime)
128
+ stdlib_base_fmod ( x , ( i + 180 ) ) == 0.0 || // 191
129
+ stdlib_base_fmod ( x , ( i + 182 ) ) == 0.0 || // 193
130
+ stdlib_base_fmod ( x , ( i + 186 ) ) == 0.0 || // 197
131
+ stdlib_base_fmod ( x , ( i + 188 ) ) == 0.0 || // 199
132
+ stdlib_base_fmod ( x , ( i + 198 ) ) == 0.0 || // 209 (relatively prime)
133
+ stdlib_base_fmod ( x , ( i + 200 ) ) == 0.0 // 211
134
134
) {
135
135
return false;
136
136
}
0 commit comments