Есть простейший код
Компилятор-Visual Studio 2008 Express Edition
double a = 12.256789;
double b = 0.000001;
a+=b;
При пустом проекте а равняется 12.25678(9)(что мне и надо)
В большом проекте почему-то тот же код дает а==12.256790161132812
Опции компилятора какие смотреть или что?
Здравствуйте, Аноним, Вы писали:
А>При пустом проекте а равняется 12.25678(9)(что мне и надо) А>В большом проекте почему-то тот же код дает а==12.256790161132812 А>Опции компилятора какие смотреть или что?
В большом проекте видимо используются какие-то функции, которые изменяют режим работы сопроцессора. Опять же, как просматривали значение? Может, отладчик (или поток вывода) по другому отформатировал.
Кё> precise — "precise" floating-point model; results are predictable
В том то и дело,что и там и там precise стоит
M>В большом проекте видимо используются какие-то функции, которые изменяют режим работы сопроцессора.
Кто-нибудь встречал такое? Как с этим бороться?
>Опять же, как просматривали значение? Может, отладчик (или поток вывода) по другому отформатировал.
И отладчиком и потоком вывода-такая вот неточность.Я знаю что особенной точности от того-же double не дождаться, но не до такой же степени
Здравствуйте, AlexNoo, Вы писали:
M>>В большом проекте видимо используются какие-то функции, которые изменяют режим работы сопроцессора. AN>Кто-нибудь встречал такое? Как с этим бороться?
Я натыкался на подобное довольно давно, когда пользовался борландовским компилятором. Как боролся — забил вроде, не критично было.
Здравствуйте, AlexNoo, Вы писали:
Кё>> precise — "precise" floating-point model; results are predictable AN>В том то и дело,что и там и там precise стоит
M>>В большом проекте видимо используются какие-то функции, которые изменяют режим работы сопроцессора. AN>Кто-нибудь встречал такое? Как с этим бороться?
>>Опять же, как просматривали значение? Может, отладчик (или поток вывода) по другому отформатировал. AN>И отладчиком и потоком вывода-такая вот неточность.Я знаю что особенной точности от того-же double не дождаться, но не до такой же степени
Что-то совсем нечисто.
double должен давать точность 15-16 десятичных знаков.
Попробовал на компиляторее gcc (под рукой нету другого сишного).
double a = 12.256789;
double b = 0.000001;
a+=b;
printf("%.13f\n", a);
результат 12.256790000000
может стоит попробовать присвоение таким образом:
double a = (double)12.256789;
double b = (double)0.000001;
Дак вот и говорю- в пустом проекте все ОК
M2>может стоит попробовать присвоение таким образом: M2> double a = (double)12.256789; M2> double b = (double)0.000001;
да всяко пробовал-(double)x и double(x).
Здравствуйте, AlexNoo, Вы писали:
M2>>может стоит попробовать присвоение таким образом: M2>> double a = (double)12.256789; M2>> double b = (double)0.000001; AN>да всяко пробовал-(double)x и double(x).
А результат такого
double a = (float)12.256789;
double b = (float)0.000001;
M2>> результат 12.256790000000
AN>Дак вот и говорю- в пустом проекте все ОК
M2>>может стоит попробовать присвоение таким образом: M2>> double a = (double)12.256789; M2>> double b = (double)0.000001; AN>да всяко пробовал-(double)x и double(x).