Skip to content

Commit e0790b9

Browse files
refactor: replace built-in with fmod in math/base/assert/is-prime
PR-URL: #3124 Reviewed-by: Athan Reines <[email protected]> Signed-off-by: Gunj Joshi <[email protected]> Co-authored-by: stdlib-bot <[email protected]>
1 parent b75e1a7 commit e0790b9

File tree

3 files changed

+99
-58
lines changed

3 files changed

+99
-58
lines changed

lib/node_modules/@stdlib/math/base/assert/is-prime/benchmark/c/native/benchmark.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,18 @@ static double rand_double( void ) {
9292
*/
9393
static double benchmark( void ) {
9494
double elapsed;
95-
double x;
95+
double x[ 100 ];
9696
double t;
9797
bool b;
9898
int i;
9999

100+
for ( i = 0; i < 100; i++ ) {
101+
x[ i ] = ( 200.0 * rand_double() );
102+
}
103+
100104
t = tic();
101105
for ( i = 0; i < ITERATIONS; i++ ) {
102-
x = ( rand_double() * 200.0 );
103-
b = stdlib_base_is_prime( x );
106+
b = stdlib_base_is_prime( x[ i % 100 ] );
104107
if ( b != true && b != false ) {
105108
printf( "should return either true or false\n" );
106109
break;

lib/node_modules/@stdlib/math/base/assert/is-prime/manifest.json

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{
2-
"options": {},
2+
"options": {
3+
"task": "build"
4+
},
35
"fields": [
46
{
57
"field": "src",
@@ -24,6 +26,7 @@
2426
],
2527
"confs": [
2628
{
29+
"task": "build",
2730
"src": [
2831
"./src/main.c"
2932
],
@@ -35,7 +38,42 @@
3538
"dependencies": [
3639
"@stdlib/math/base/special/sqrt",
3740
"@stdlib/math/base/special/floor",
38-
"@stdlib/constants/float64/max-safe-integer"
41+
"@stdlib/constants/float64/max-safe-integer",
42+
"@stdlib/math/base/special/fmod"
43+
]
44+
},
45+
{
46+
"task": "benchmark",
47+
"src": [
48+
"./src/main.c"
49+
],
50+
"include": [
51+
"./include"
52+
],
53+
"libraries": [],
54+
"libpath": [],
55+
"dependencies": [
56+
"@stdlib/math/base/special/sqrt",
57+
"@stdlib/math/base/special/floor",
58+
"@stdlib/constants/float64/max-safe-integer",
59+
"@stdlib/math/base/special/fmod"
60+
]
61+
},
62+
{
63+
"task": "examples",
64+
"src": [
65+
"./src/main.c"
66+
],
67+
"include": [
68+
"./include"
69+
],
70+
"libraries": [],
71+
"libpath": [],
72+
"dependencies": [
73+
"@stdlib/math/base/special/sqrt",
74+
"@stdlib/math/base/special/floor",
75+
"@stdlib/constants/float64/max-safe-integer",
76+
"@stdlib/math/base/special/fmod"
3977
]
4078
}
4179
]

lib/node_modules/@stdlib/math/base/assert/is-prime/src/main.c

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
#include "stdlib/math/base/special/sqrt.h"
2121
#include "stdlib/math/base/special/floor.h"
2222
#include "stdlib/constants/float64/max_safe_integer.h"
23+
#include "stdlib/math/base/special/fmod.h"
2324
#include <stdint.h>
24-
#include <math.h>
2525

2626
static const double WHEEL_PRIMES[45] = {
2727
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 ) {
5454
return ( x > 1.0 ); // primes: 2.0, 3.0
5555
}
5656
// 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 ) {
5858
return false;
5959
}
6060
// Check for small primes...
6161
if ( x < 9.0 ) {
6262
return true; // primes: 5.0, 7.0
6363
}
6464
// 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 ) {
6666
return false;
6767
}
6868
// 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 ) {
7070
return false;
7171
}
7272
// 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 ) {
7474
return false;
7575
}
7676
// Check whether the number is a prime number in the wheel...
@@ -83,54 +83,54 @@ bool stdlib_base_is_prime( const double x ) {
8383
N = stdlib_base_floor( stdlib_base_sqrt( x ) );
8484
for ( i = 11; i <= N; i += 210 ) {
8585
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
134134
) {
135135
return false;
136136
}

0 commit comments

Comments
 (0)