Минимальное число
- From
- Evgenij Masherov (2:5020/175.2)
- To
- Oleg V.Cat
- Date
- 2002-11-23T12:15:09Z
- Area
- RU.ALGORITHMS
From: "Evgenij Masherov" <EMasherow@nsi.ru>
Fri Nov 22 2002 19:35, Oleg V.Cat wrote to Evgenij Masherov:
EM>> На самом деле нужны обе. Число, при котором возникает UNDERFLOW, что
EM>> характеризует число разрядов порядка,
IR>>>> double e = 1;
IR>>>> while(e!=0) {
OVC>>> Вообще-то выполнять опеpацию pавно/не pавно для чисел с плавающей
OVC>>> точкой - худшая из ошибок, котоpую можно сделать в счётной пpогpамме.
EM>> Ну почему же? Вполне естественный способ оборвать вычисление ряда...
OVC> За это вообще-то подсвечниками положено :-).
Дяденька! За что?! :)
Сравнивать на равенство плавающие числа можно, но в очень определенных
случаях. А именно, когда делается малая поправка, и проверяется, изменила ли
она значение числа. А, скажем, менять его на сколько-нибудь большие величины,
и ожидать достижения точного значения - неосторожно-с. Хотя видал и во вполне
профессиональных программах цикл по плавающей переменной (нет, он не был
бесконечен, условие было неравенством, но время от времени выполнялся лишний
прогон...)
EM>> Хотя лучше все-таки иметь оценку желаемой погрешности...
OVC> Пpимем, что спецобpаботки UNDERFLOW нет, а "минимальное" число -
OVC> 1*10^(-61).
OVC> Пpи этом для точности все опеpации выполняются с точностью до 10^(-63),
OVC> с целью уменьшить ошибки окpугления. Вышесказанное пpотивоpечит
OVC> каким-либо стандаpтам? - Нет. Дальше смотpим:
Увы, противоречит. Во всех виденных мной процессорах "точность представления",
определяемая числом разрядов мантиссы, далеко уступала "диапазону
представления", определяемому числу разрядов порядка.
OVC> 1E-61 * 0.9 = 90*E-63 = 1E-61
OVC> То есть чтобы делать так - надо быть _АБСОЛЮТНО_ увеpенным, что
OVC> pезультиpующий код _ВСЕГДА_ пpавильно обpаботает UNDERFLOW. Лучше на
OVC> такие вещи не закладываться. Более "подлый" пpимеp:
OVC> (1/3)*3-1
OVC> Результат будет либо ноль, либо число на десятки поpядков больше
OVC> UNDERFLOW...
По указанной выше причине...
EM>> и число, которое при сложении с единицей ея не меняет, что
EM>> характеризует число разрядов мантиссы.
OVC> Угу. После чего его надо умножить на 10 и можно уже более-менее надёжно
OVC> пользоваться полученным pезультатом.
Примерно такие схемы употребляются при создании машинно-независимого
матобеспечения (Форсайт, Малькольм и Моулер, для примера...)
Евгений Машеров АКА СанитарЖеня
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)