This is topic Избавится от дробной части in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/33/t/000063.html

Posted by Paulo (Участник № / Member № 3020) on :
 
Здравствуйте!

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

...
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; //Сумма целой и пересчитанной дробной части

Увы, но итог остался прежним.
Если у кого есть какое решение, подскажите что делать? Главная задача — получить из дробного числа целое, но чтобы дробная часть была учтена.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Это связано с неточностью округления числа типа Float из-за его представления в двоичной системе. Например, число 1.6 это на самом деле 1.60000002384186, а 1.3 - 1.29999995231628.
 
Posted by Paulo (Участник № / Member № 3020) on :
 
Это конечно всё здорово, но что мне делать?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Проверку контрольной суммы с помощью float делать нецелесообразно.

2) Функция остаток от деления применима только к целочисленным форматам.
 
Posted by Вяткин Н В (Участник № / Member № 1853) on :
 
для подсчета контрольной суммы работать только с байтами
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2