Позначимо через (я ліниво намагався отримати кругову версію оператора ділення) аналоги з плаваючою комою точного множення ( ), додавання ( ) та віднімання ( ) відповідно. Будемо вважати (IEEE-754), що для всіх них
де - це епсилон машини, що надає верхню межу відносної похибки через округлення. Ми також використаємо таку лему (якщо припустити, що всі , а не надто велика), яку можна легко довести:
× + - [ x ⊕ y ] = ( x + y ) ( 1 + δ ⊕ ) ,⊗,⊕,⊖×+−ϵ m a c h | δ i | ≤ ϵ m a c h m m ∏ i = 1 ( 1 + δ i ) = 1 + θ ( m ) ,
[ x ⊕ y] = ( х + у) ( 1 + δ⊕) ,| δ⊕| ≤ ϵm a c h,
ϵm a c h| δi| ≤ ϵm a c hм∏i = 1м( 1 + δi) = 1 + θ ( м ) ,| θ(m) | ≤ m ϵm a c h1 - m ϵm a c h
Давайте визначимо справжню функцію яка діє на дійсні числа якfх , у, z
f( х , у, z) = ( x × z) - ( у× z)
і дві версії реалізації функції в арифметиці з плаваючою комою, сумісною з IEEE, як і які працюють на представленнях з плаваючою комою таким чином:f1~f2~х~= x ( 1 + δх) , у~, z~
f1~( х~, у~, z~) = ( х~⊗ z~) ⊖ ( у~⊗ z~) ,
f2~( х~, у~, z~) = ( х~⊖ у~) ⊗ z~.
Аналіз помилок для :f1~
f1~=((x(1+δx)×z(1+δz))(1+δ⊗xz)(x~⊗z~)−(y(1+δy)×z(1+δz))(1+δ⊗yz)(y~⊗z~))(1+δ⊖)=xz(1+δx)(1+δz)(1+δ⊗xz)(1+δ⊖)−yz(1+δy)(1+δz)(1+δ⊗yz)(1+δ⊖)=xz(1+θxz,1)−yz(1+θyz,1).
Тут, .
|θxz,1|,|θyz,1|≤4ϵmach1−4ϵmach
Аналогічно для
Тут, .f2~
f2~=(((x(1+δx)−y(1+δy)(1+δ⊖xy))×(z(1+δz)))(1+δ⊗)=xz(1+δx)(1+δz)(1+δ⊖xy)(1+δ⊗)−yz(1+δy)(1+δz)(1+δ⊖xy)(1+δ⊗)=xz(1+θx,2)−yz(1+θy,2).
|θx,2|,|θy,2|≤4ϵmach1−4ϵmach
Отже, і для і для ми отримали вирази одного типу, тому я не бачу, чому одна реалізація була б кращою для іншої з числової точки зору (крім того, що виконує лише 2 операції з плаваючою комою порівняно з ).f1~f2~f2~f1~
Обчислення відносної помилки покаже, що проблема виникає з того, що і можуть бути дуже близькими ( скасування ).xy
|f1~−f||f|=|xz+xzθxz,1−yz−yzθyz,1−(xz−yz)||xz−yz|=|xθxz,1−yθyz,1||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach,
|f2~−f||f|=|xz+xzθx,2−yz−yzθy,2−(xz−yz)||xz−yz|=|xθx,2−yθy,2||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach.
Невеликі відмінності між 's можуть зробити одну з двох числових реалізацій незначно кращою або гіршою залежно від . Однак я сумніваюся, що це може мати будь-яке значення. Результат абсолютно має сенс, тому що незалежно від того, якщо вам доведеться обчислити , коли і досить близькі за значеннями (для точності, з якою ви працюєте) за допомогою арифметики з плаваючою комою, ніяке масштабування не допоможе вам: ви вже в біді.x , y , z ( x - y ) x yθx,y,z(x−y)xy
Примітка: Усі обговорення вище не передбачають переповнення або переливу, тобто , є множиною всіх нормальних чисел з плаваючою комою.F 0x,y,z,f(x,y,z)∈F0F0