Имеется код на C и C++
/*c.c*/
#include <stdio.h>
int main()
{
double i;
for (i=-0.4; i<=0.4; i+=0.1) printf("%.1f\n",i);
return 0;
}/*cpp.cpp*/
#include <iostream>
int main()
{
for (double i=-0.4; i<=0.4; i+=0.1)
std::cout << i << std::endl;
return 0;
}$ g++ cpp.cpp -o cpp
$ ./c
-0.4
-0.3
-0.2
-0.1
-0.0
0.1
0.2
0.3
0.4
$ ./cpp
-0.4
-0.3
-0.2
-0.1
-2.77556e-17
0.1
0.2
0.3
0.4
я понимаю, что чистого нуля тут не получается из за представления числа 0.1 в двоичной системе. Но почему на C выводит 0, а на С++ нет? Различия в оптимизации или что? Кто может объяснить мне это?

