Страница 1 из 1

long double и floating point error

Добавлено: 22 окт 2007, 17:24
ilyagoo
доброго времени суток, господа. прощу помочь вот в каком вопросе:
реализую Метод Наименьших Квадратов на си. это работа с матрицами, элементами которых являются рациональные числа. обрабатывается большое количество чисел (порядка пары тысяч). при использовании функции pow() возникает floating point error. т.к. числа рациональные, а я имею дело с их произведениями, то получаю числа близкие к 0. почему-то не пашет long double, хотя и его я думаю не очень-то хватит. как бы вывернуться из этой западни? пишу под вынь, юзаю borland c 5.5 (консоль). в итоге это всё будет перекинуто в builder 6, но надо для начала избавиться от этих ошибок. пожалуйста, если знаете пути решения, выручайте.
заранее спасибо всем ответившим.

Re: long double и floating point error

Добавлено: 23 ноя 2007, 11:47
Romeo
Думаю, здесь мы просто упираемся в особенности машиного предстваления чисел и что ли сделать с этим не получится простыми методами. Если long double не поможет, то придётся изобретать что-то более сложное. Например свой тип. Могу предложить подход когда число будет снабжено дополнительной long long пременной, которая будет хранить масштаб мантисы. Программа должна анализировать значение числа, и если оно слишком близко к нулю, то умножать его 10 в n-й степени, а в переменную long long помещать число n. Это набросок, попрошу не придираться к мелочам :)

Подобный подход наверняка спасёт. Проблема в том, что нужно будет реализовать операции + - * / с такими числами. Ну и не стоит говорить, думаю, о том, что максимально удобно это было бы реализовать с помощью класса.