LINUX.ORG.RU

atof() не сохраняет точность


0

0

Заметил один парадокс. Я в курсе про сабж, но чтоб так... Разве число 4.8 такое большое, что не запомнить его точность?

При r = 3
и a = 4.8
прога выводит:
./1.18 3 4.8
r = 3
a = 4.79999999999999982236431605997495353221893310546875
r/a = 0.625
5.0/8.0 = 0.625
r/a != 5.0/8.0 = true

#include <iostream>
#include <cmath>
using namespace std;

int main(int argc, char *argv[])
{
if(argc != 3)
{
cerr << "Использование: команда r a" << endl;
return 1;
}

const double r = atof(argv[1]);
const double a = atof(argv[2]);

cout.precision(100);
cout << "r = " << r << endl;
cout << "a = " << a << endl;
cout << "r/a = " << r/a << endl;
cout << "5.0/8.0 = " << 5.0/8.0 << endl;
cout << "r/a != 5.0/8.0 = " << boolalpha << ( r/a != 5.0/8.0) << endl;

return 0;
}

★★★★

> Я в курсе про сабж

боюсь, что нет :)

> Разве число 4.8 такое большое,

это не при чем (большое или маленькое).

это обсуждалось до смерти уже, поищите.

коротко: многие из чисел в десятичной записи
нельзя сохранить без потери точности в double.

idle ★★★★★
()
Ответ на: комментарий от idle

Не нашёл ничего на лоре по запросу "atof"

Selecter ★★★★
() автор топика
Ответ на: комментарий от nsav-ng

Спасибо. Уже в гугле знаю что искать.

Selecter ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.