Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2011, 10:40   #1
VIKT0R1
Новичок
Джуниор
 
Регистрация: 17.11.2011
Сообщений: 2
По умолчанию Непонятное поведение функции sscanf(,%lf,)

Добрый день всем!

Столкнулся с такой проблемой:
читаю строку из трёх вещественных чисел TEXT 18.4, 5.08, 3.015


double value[3];

sscanf(str, "TEXT %lf, %lf, %lf", &value[0], &value[1], &value[2]);


потом смотрю значение value[0], а там вместо 18.4 - 18.399999999999
Подскажите, пожалуйста, почему это происходит, и можно ли с этим бороться?
VIKT0R1 вне форума Ответить с цитированием
Старый 17.11.2011, 15:50   #2
V@Programmer
На форуме меня нет
Пользователь
 
Аватар для V@Programmer
 
Регистрация: 03.08.2011
Сообщений: 56
По умолчанию

прибавляй к числу 1; P.S. это почти шутка Но у меня так работает
Делаю бд, программы,
icq 640743615 дамы!
V@Programmer вне форума Ответить с цитированием
Старый 17.11.2011, 18:37   #3
-=ЮрА=-
C/C++ advanced
Пользователь
 
Аватар для -=ЮрА=-
 
Регистрация: 17.11.2011
Сообщений: 17
По умолчанию

VIKT0R1, обратите внимание на то какой у Вас спецификатор чтения %lf - он предполагает double - в машинном представлении double имеет 12-ть ноликов после запятой, поэтому 18.4 эквивалентно 18.399999999999 - т.е погрешность 10 в минус 12. В программе ваше 18.399999999999 считаться будет как 18.4(сомневаюсь чтобы вы заметили погрешность в пико-долях)Вобщем всё будет верно работать, а если хотите хорошо пропечатать число сделайте так
printf("%.2f",value[0]); И посмотрите результат

PS:А мы с вами по-моему уже встречались, правда не здесь
За "хлеб и воду" не работаю
-=ЮрА=- вне форума Ответить с цитированием
Старый 18.11.2011, 08:23   #4
VIKT0R1
Новичок
Джуниор
 
Регистрация: 17.11.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от -=ЮрА=- Посмотреть сообщение
В программе ваше 18.399999999999 считаться будет как 18.4(сомневаюсь чтобы вы заметили погрешность в пико-долях)Вобщем всё будет верно работать
PS:А мы с вами по-моему уже встречались, правда не здесь
-=ЮрА=-, эту погрешность я может и не заметил бы, если бы программа работала верно Дело в том, что дальше в программе из-за этой 0,0000000001 функция acos получает недопустимый аргумент 1.0000000001.
P.S.
А вообще-то, почему у функции scanf возникает эта погрешность?
VIKT0R1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное поведение скрипта AlexDn JavaScript, Ajax 7 06.08.2010 06:16
непонятное поведение cout jammer77 Общие вопросы C/C++ 22 02.07.2010 11:56
Непонятное поведение типа J-Max Общие вопросы Delphi 12 10.02.2010 17:15
Непонятное поведение алгоритма master_root Общие вопросы Delphi 3 11.06.2008 14:32