inconsistent for() and while() behavior when using floating point

From: Yuri Pankov <yuripv_at_icloud.com>
Date: Mon, 15 Jan 2018 17:38:54 +0300
Hi,

Looking at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=217149, I 
noticed that it isn't a seq(1) problem per se, rather for() and while() 
loops behaving inconsistently while using floating point, i.e.:

         double i;

         for (i = 1; i <= 2.00; i += 0.1)
                 printf("%g\n", i);

would produce:

         1
         ...
         1.9

but:

         double i;

         for (i = 1; i <= 2; i += 0.2)
                 printf("%g\n", i);

would correctly end with 2:

         1
         ...
         2

$ cc -v
FreeBSD clang version 6.0.0 (branches/release_60 321788) (based on LLVM 
6.0.0)
Target: x86_64-unknown-freebsd12.0
Thread model: posix
InstalledDir: /usr/bin

though gcc 4.4.4 on illumos behaves the same.

Is this a known problem with loops and floating point numbers?
Received on Mon Jan 15 2018 - 13:39:23 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:14 UTC