• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Floating Point Error

  • Автор темы zasw
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z

zasw

C++:
int i = 124; int j = 0; "c" и "y" это float с диапазоном от 1 до 2; 
x это long double от 0.01 до 100; 
tempsum - long double; cr - long double;
--------------------------------------------------------------------------
for(; i>0; i--, j++)
{  cr = *c - (stp1.mass[j].y);
correctmul(&cr, &csp, stp1);
tempsum += (cr * stp1.mass[j].x * 1000);} //<--- overflow

в указанной строке происходит переполнение
мненужно только 5 знаков после запятой в самом крайнем случае.
с этой ошибкой я довольно часто сталкиваюсь так что мне нужно както решить ее основательно. раньше я просто увеличивал точность(double-> long double).
я разложил цикл получилось что переполнение вызывает
вот это выражение
stp1.mass[j].x * 1000;
 
R

rrrFer

посмотри отладчиком значение stp1.mass[j].x перед умножением
 
Z

zasw

решил, с помошью finit - это была ошибка сопроцессора.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!