diff --git a/core/Float.cc b/core/Float.cc
index 881fc660ef687d870afe80b00eea68712db32c5d..050ab6bd2d5e6e76adf35e1c142f9f21707232d4 100644
--- a/core/Float.cc
+++ b/core/Float.cc
@@ -481,7 +481,11 @@ FLOAT::BER_encode_TLV(const TTCN_Typedescriptor_t& p_td,
       double mantissa, exponent;
       exponent=floor(log10(fabs(float_value)))+1.0-DBL_DIG;
       mantissa=floor(float_value*pow(10.0,-exponent)+0.5);
-      if(mantissa)while(!fmod(mantissa,10.0))mantissa/=10.0,exponent+=1.0;
+      if(mantissa != 0.0) {
+        while(fmod(mantissa,10.0) == 0.0) {
+          mantissa/=10.0,exponent+=1.0;
+        }
+      }
       /** \todo review
           gcc 2.95:
           in mprintf below:
@@ -1188,7 +1192,11 @@ int FLOAT::OER_encode(const TTCN_Typedescriptor_t&, TTCN_Buffer& p_buf) const {
     double mantissa, exponent;
     exponent=floor(log10(fabs(float_value)))+1.0-DBL_DIG;
     mantissa=floor(float_value*pow(10.0,-exponent)+0.5);
-    if(mantissa)while(!fmod(mantissa,10.0))mantissa/=10.0,exponent+=1.0;
+    if(mantissa != 0.0) {
+      while(fmod(mantissa,10.0) == 0.0) {
+        mantissa/=10.0,exponent+=1.0;
+      }
+    }
     char * uc =
       mprintf("\x03%.f.E%s%.0f", mantissa, exponent==0.0?"+":"", exponent);
     size_t len = mstrlen(uc);