This is topic Избавится от дробной части in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Для расчета контрольной суммы необходимо складывать числа разного порядка. Чтобы она поместилась в разрядную сетку решил избавится от дробной части, но учитывать её. Написал функцию в которой есть вот такой фрагмент
... 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 :
для подсчета контрольной суммы работать только с байтами