| 
									
										
										
										
											1991-02-19 12:39:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | /* Portable fmod(x, y) implementation for systems that don't have it */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-26 13:41:06 +00:00
										 |  |  | #include "pyconfig.h"
 | 
					
						
							| 
									
										
										
										
											1995-02-27 10:15:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-31 15:28:04 +00:00
										 |  |  | #include "pyport.h"
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | #include <errno.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | double | 
					
						
							| 
									
										
										
										
											1995-02-27 10:15:10 +00:00
										 |  |  | fmod(double x, double y) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	double i, f; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if (y == 0.0) { | 
					
						
							|  |  |  | 		errno = EDOM; | 
					
						
							|  |  |  | 		return 0.0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	/* return f such that x = i*y + f for some integer i
 | 
					
						
							|  |  |  | 	   such that |f| < |y| and f has the same sign as x */ | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	i = floor(x/y); | 
					
						
							|  |  |  | 	f = x - i*y; | 
					
						
							|  |  |  | 	if ((x < 0.0) != (y < 0.0)) | 
					
						
							|  |  |  | 		f = f-y; | 
					
						
							|  |  |  | 	return f; | 
					
						
							|  |  |  | } |