Paulo
Junior Member / Новичок
Участник № / Member № 3020
отправлено / posted
Здравствуйте!
Для расчета контрольной суммы необходимо складывать числа разного порядка. Чтобы она поместилась в разрядную сетку решил избавится от дробной части, но учитывать её. Написал функцию в которой есть вот такой фрагмент
... 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 |
отправлено / posted
Это связано с неточностью округления числа типа Float из-за его представления в двоичной системе. Например, число 1.6 это на самом деле 1.60000002384186, а 1.3 - 1.29999995231628.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Paulo
Junior Member / Новичок
Участник № / Member № 3020