сегодня случилось со мной странно, когда я пытаюсь скомпилировать и выполнить вывод этого кода, это не то, что я ожидал. Вот код, который просто добавляет плавающие значения в массив float и затем распечатывает его. Простой код:Поплавок странная ошибка неточности в c
int main(){
float r[10];
int z;
int i=34;
for(z=0;z<10;z++){
i=z*z*z;
r[z]=i;
r[z]=r[z]+0.634;
printf("%f\n",r[z]);
}
}
выход:
0.634000
1.634000
8.634000
27.634001
64.634003
125.634003
216.634003
343.634003
512.633972
729.633972
отмечают, что из 27 цифр появляется после того, .634, которые не должны быть там. Кто-нибудь знает, почему это произошло? Это событие, вызванное точечном приближении плавающим ..
PS У меня есть система Linux Debian, 64 бит
благодарит всех
Поплавкая неточность не является неожиданностью - http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Luizgrs
Yous 'double' вместо этого, и это должно быть лучше, но вы никогда не сможете избежать это с плавающей запятой. –
прочитайте [this] (http://floating-point-gui.de/) сначала, затем прочитайте статью оракула выше –