Re[11]: Случай с числовой стабильностью
От: What Беларусь  
Дата: 09.02.06 15:19
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Нет, как раз точность теряется при преобразовании double -> float, что вполне естественно и ожидаемо. Все значения во Float — это "реальность, данная нам в ощущениях", то есть, другого у нас нет. Но нахождение среднего не сбоит — результат получается в точности такой же, как и в вычислениях с double, если мы берем исходные данные из float (xb1... взяты из x1...). То есть, формула (a+b)/2 в данном случае работает точно. Более того, мы можем выпролнять эти пополамные деления многократно без потери точности.

Да, согласен, был неправ. (a+b)/2 действительно работает точно.
Если считать по формуле a * x1 + (1 — a) * x2, то изменение в последнем знаке мантиссы a очень сильно влияет на результат. Точности float в том случае не хватает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Случай с числовой стабильностью
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.02.06 08:35
Оценка:
Здравствуйте, McSeem2, Вы писали:
MS>Проблема в том, что вычисления происходят на пределе числовой стабильности. Отрезки очень длинные, а расстояние (X2,Y2)->(X3,Y3) очень маленькое. В результате, вычисленная координата X может оказаться больше X3, хотя абсолютной точности представления в районе X,X3 все еще вполне достаточно.
MS>Как бы так преобразовать выражение, учитывая специфику операций с плавающей точкой, чтобы на данном рисунке вычисленная X никогда не получалась больше X3?
Ну, в таком случае ведь можно посчитать и "наоборот", т.е. плясать от X2:
X= X2-K*(Y3-Y2).
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Случай с числовой стабильностью
От: McSeem2 США http://www.antigrain.com
Дата: 15.02.06 03:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, в таком случае ведь можно посчитать и "наоборот", т.е. плясать от X2:

S>
S>X= X2-K*(Y3-Y2). 
S>


Я именно так и сделал:
http://www.rsdn.ru/Forum/Message.aspx?mid=1660145&amp;only=1
Автор: McSeem2
Дата: 05.02.06


Более того, если точка близка к середине, я просто выполняю одно деление пополам. Это со всеми проверками хоть и накладно, но еще приемлемо.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Случай с числовой стабильностью
От: Аноним  
Дата: 16.02.06 06:30
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Есть два отрезка на плоскости, (X1,Y1)->(X2,Y2) и (X3,Y3)->(X4,Y4). Собственно, нас интересует точка (X3,Y3). Надо на первом отрезке вычислить координату X, соответствующую координате Y3.

MS>

MS>Ну это элементарная пропорция:

MS>
MS>K = (X2-X1) / (Y2-Y1)
MS>X = (Y3-Y1) * K + X1
MS>

MS>Проблема в том, что вычисления происходят на пределе числовой стабильности. Отрезки очень длинные, а расстояние (X2,Y2)->(X3,Y3) очень маленькое. В результате, вычисленная координата X может оказаться больше X3, хотя абсолютной точности представления в районе X,X3 все еще вполне достаточно.
MS>Как бы так преобразовать выражение, учитывая специфику операций с плавающей точкой, чтобы на данном рисунке вычисленная X никогда не получалась больше X3?

На рисунке ниже приведена линия и обозначен пунктиром коридор точности задания положения этой линии. Любые вычисления дадут результат в пределах ширины коридора точности. Ширина коридора точности, в пределах которого плавает линия, пропорциональна абсолютным значениям координат точек (x1, y1) и (x2, y2). Так как значения координат большие то и коридор точности широк. Значит, погрешность вычислений будет большая.
Re[2]: Случай с числовой стабильностью
От: KW_ Россия  
Дата: 16.02.06 06:44
Оценка:
На рисунке ниже приведена линия и обозначен пунктиром коридор точности задания положения этой линии. Любые вычисления дадут результат в пределах ширины коридора точности. Ширина коридора точности, в пределах которого плавает линия, пропорциональна абсолютным значениям координат точек (x1, y1) и (x2, y2). Так как значения координат большие то и коридор точности широк. Значит, погрешность вычислений будет большая.

— — — — — — — — — — — — —
(x1, y1) _________________________ (x2, y2)

— — — — — — — — — — — — -
Re[3]: Случай с числовой стабильностью
От: McSeem2 США http://www.antigrain.com
Дата: 18.02.06 14:58
Оценка:
Здравствуйте, KW_, Вы писали:

KW_>На рисунке ниже приведена линия и обозначен пунктиром коридор точности задания положения этой линии. Любые вычисления дадут результат в пределах ширины коридора точности. Ширина коридора точности, в пределах которого плавает линия, пропорциональна абсолютным значениям координат точек (x1, y1) и (x2, y2). Так как значения координат большие то и коридор точности широк. Значит, погрешность вычислений будет большая.

KW_>          - - - - - - - - - - - - - 
KW_>(x1, y1)  _________________________  (x2, y2)

KW_>          - - - - - - - - - - - - -


В том-то и дело, что во многих случаях можно достичь большего. Например, мы увеличиваем некий фрагмент в 100 миллионов раз. Понятно, что конечные точки начинают при этом "скакать". Но я хочу чтобы и вычисленная точка на отрезке "скакала" вместе с ним. Эта точка — видима в окне с размерами порядка тысячи. А в этих пределах числа имеют очень даже хорошую точность. Иными словами, "коридор точности" выглядит примерно так:
          --                -- 
             --          --
                --    --
                   --
(x1, y1)  ---------------------- (x2, y2)
                   --
                --    --
             --          --
          --                --


Что и показывает метод деления пополам.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.