Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тип даных float, сложение двух даных (тип float) 
:(
    Опции темы
danlee
  Дата 6.4.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте!
У меня следующая проблема:
когда к переменной типа float прибавить несколько раз скажем 0,01 результат получаеться скакамито лишними цифрами. К примеру код:
Код


float inc;
float stop;
stop=0;
inc=StrToFloat(Edit1->Text.c_str());//0,01
do
        {
        stop=stop+inc;
        M->Lines->Add(stop);   //TMemo
        }while (stop<50);

результат для первых 3-х проходов цикла будет :0,00999999977648258;  0,0199999995529652;  0,0299999993294477;
Может их нужно округлить?Но как ето сделать, при етом мне нужен точный результат скажем 0,01; 0,02 и так далее?
PM MAIL   Вверх
korian
Дата 6.4.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



также как в десятичной системе измерения нельзя записать дробь 1/3,
точно также в двоичной системе исчисления нельзя записать дробь 0.01.
обычно все вычисления производятся с необходимой (конечной) точностью.
поэтому при выводе или сравнениях float чисел надо учитывать только необходимую точность.
т.е. конструкцию типа - if (a == b)
записывать надо так: if ((a < b + epsilon) && (a > b - epsilon))
где epsilon нужная точность.
также и при выводе, просто указываем нужную точность.


Это сообщение отредактировал(а) korian - 6.4.2008, 18:49
PM   Вверх
petlyura
Дата 7.4.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

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



В <math.hpp> есть функция RoundTo(stop, -2); 
В данном случае, округлит вывод до 2-х знаков
PM MAIL   Вверх
mrbrooks
Дата 7.4.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Чего то как то слишком мудрено. Юзаем матчасть.

Код

float a = StrToFloatDef(Edit1->Text, 0.01);
for (float b = 0; b < 50; b += a) Memo1->Lines->Add(FloatToStrF(b,ffFixed,4,2));

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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