diff --git a/include/simulink_math_fcn.c b/include/simulink_math_fcn.c
index 723f392940610c2744241d996512bc2a9e326954..b11aa03dcd34dbe8f43f9c2571c5b10efd513687 100644
--- a/include/simulink_math_fcn.c
+++ b/include/simulink_math_fcn.c
@@ -19,14 +19,19 @@ int mod_int (int x, int y) {
 }
 
 double rem_real (double x, double y) {
-  return fmod(x, y);
+    if (x == 0.0 || y == 0.0){
+        return 0.0;
+    }else{
+        return fmod(x, y);
+    }
 }
 
 double mod_real (double x, double y) {
   double tmp = 0.;
   if (y == 0.) { return x; };
+  if (x == 0.) { return 0; };
   tmp = fmod(x, y);
-  if (y < 0. && tmp > 0.) {
+  if (y*tmp < 0.) {
     return tmp+y;
   }
   else {