Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странная работа функции sprintf 
:(
    Опции темы
KingT
Дата 8.6.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.4.2010

Репутация: нет
Всего: нет



Столкнулся с проблемой,не могу понять почему в ниже приведенном коде в TmpStr печатается 99,999999  а не 100. Самое интересное что если раскомментировать строку то печатается 100.0000.
MCVS 6.0

Код


#define TIMEBASE_SCR_MAX    8191

int main()
{
char TmpStr[50];
unsigned int tb = 8191;
float timebaseval = 100.f / TIMEBASE_SCR_MAX*tb;

//int a = 0;
sprintf(TmpStr,"%f",timebaseval);

return 0;
}


PS: если переписать float timebaseval = 100.f*tb/TIMEBASE_SCR_MAX;  то все нормально тогда,но всетаки хотялось бы понять что происходит в первом случае.
PM MAIL   Вверх
Dem_max
Дата 8.6.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



это от того что timebaseval число с плавающей точкой, оно может принимать значение 100.0000001, 99.9999999999, 100.00000000


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
KingT
Дата 8.6.2010, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.4.2010

Репутация: нет
Всего: нет



Код

float timebaseval = 100.f/TIMEBASE_SCR_MAX * tb;
float timebasevalg = 100.f*tb/TIMEBASE_SCR_MAX;


Посмотрел дебаггером память,оба 00 00 C8 42. Где разница ума не приложу?
PM MAIL   Вверх
Dem_max
Дата 8.6.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



приводи к int  timebaseval


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
azesmcar
Дата 8.6.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

float timebaseval = (100.f*tb) / TIMEBASE_SCR_MAX;

так попробуй
PM   Вверх
KingT
Дата 8.6.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.4.2010

Репутация: нет
Всего: нет



Ну что делать понятно.Просто хочу понять это что баг шестой студии или что?В 2005 такого нет.
PM MAIL   Вверх
mes
Дата 8.6.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



если не изменяет память, %f предназначен  для double, а не для float


--------------------
PM MAIL WWW   Вверх
Dem_max
Дата 9.6.2010, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



не у меня в билдере печатает постоянно 100.0000


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0980 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.