Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Языки программирования в TRACE MODE 6 / Algorithm Programming Languages » Избавится от дробной части

   
Автор / Author Тема / Topic: Избавится от дробной части
Paulo
Junior Member / Новичок
Участник № / Member № 3020


Icon 1 отправлено / posted      Профиль для / Profile for Paulo           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте!

Для расчета контрольной суммы необходимо складывать числа разного порядка. Чтобы она поместилась в разрядную сетку решил избавится от дробной части, но учитывать её. Написал функцию в которой есть вот такой фрагмент

...
While i - i%1 != i do
i = i*10 + 1;
end_while;
КС = i;
...
Переводя на русский язык — пока у числа есть дробная часть умножаем его на 10 (и прибавляем единичку, чтобы учитывать порядок, хотя это и не обязательно). В результате имеем, что с целыми числами всё работает нормально, а вот с дробными начинаются проблемы. Вот, к примеру
i = 1, КС =1;
i = 3, КС =3;
i = 0,3, КС =4;
i = 0,03, КС =14;
А вот если взять i = 1,03, то КС =1.14111e+07

Решил использовать только дробную часть следующим образом


i=Число%1; //Дробная часть
j=Число-i; //Целая часть
While i - i%1 != i do
i = i*10 + 1;
end_while;
КС=j+i; //Сумма целой и пересчитанной дробной части

Увы, но итог остался прежним.
Если у кого есть какое решение, подскажите что делать? Главная задача — получить из дробного числа целое, но чтобы дробная часть была учтена.

Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Это связано с неточностью округления числа типа Float из-за его представления в двоичной системе. Например, число 1.6 это на самом деле 1.60000002384186, а 1.3 - 1.29999995231628.
Сообщения / Posts 17317 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Paulo
Junior Member / Новичок
Участник № / Member № 3020


Icon 1 отправлено / posted      Профиль для / Profile for Paulo           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Это конечно всё здорово, но что мне делать?
Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1) Проверку контрольной суммы с помощью float делать нецелесообразно.

2) Функция остаток от деления применима только к целочисленным форматам.

Сообщения / Posts 17317 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Вяткин Н В
Forum Haunter / Завсегдатай форума
Участник № / Member № 1853


Icon 1 отправлено / posted      Профиль для / Profile for Вяткин Н В           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
для подсчета контрольной суммы работать только с байтами
Сообщения / Posts 101 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2