重根に対する数値解の誤差
先の出力の dist は,同じ値に対すると見做した数値解間の複素平面上での距離ですが,単根の場合の(絶対)誤差 10^{-30} に対して,例えば,下の部分では 10^{-11} まで膨らんでいます.
1 multi-roots: (-6.2414826969557199979633340867b-13*%i)-6.38943104254668599248510111018b-1 (-6.95918202422128079528203919324b-12*%i)-6.38943104241533885902022292701b-1 [x^4+a*x^2+b*x+c, x^4-2.44948974278317809819728407471b0*x^2 -2.08677944009771642211264733221b0*x-5.0b-1] dist: 1.45826385597869537841530414623b-11 2 multi-roots: (-6.95918202422128079528203919324b-12*%i)-6.38943104241533885902022292701b-1 7.58333029391685279498189770221b-12*%i-6.38943104242614942415515511763b-1 [x^4+a*x^2+b*x+c, x^4-2.44948974278317809819728407471b0*x^2 -2.08677944009771642211264733221b0*x-5.0b-1] dist: 1.4582638571553690760678343437b-11
これは,一般に n 重根に対する数値解の誤差は,単根に対する数値解の誤差の 1/n 乗程度となる性質によるもので,上の場合は,3 重根なので指数が -30 の 1/3 程度となっている訳です.
この例の出所をもう少し詳しく述べると,上記は,下位の lifting で projection factor から得た
c = root(2*c+1, 1), b = root(4096*c^3+27*b^4, 1), a = root(8*a*c-9*b^2-2*a^3, 1)
の数値解を x^4+a*x^2+b*x+c = 0 に代入した
x^4-2.44948974278317809819728407471b0*x^2-2.08677944009771642211264733221b0*x-5.0b-1 = 0
を解いたもので,厳密解
c = - 1/2 = - 0.5, b = - (4*2^(1/4))/(3^(3/4)) = 2.08677944009771642211264733221..., a = - 6^(1/2) = 2.449489742783178098197284074705...
に対して,数値解は
c = - 5.0b-1, b = - 2.08677944009771642211264733221b0, a = - 2.44948974278317809819728407471b0
なので,c,b,a までの精度は保たれており,最後の
x^4+a*x^2+b*x+c = (x-3^(3/4)/2^(1/4))*(x+1/6^(1/4))^3 = 0
の 3 重根
-1/6^(1/4) = - 0.6389431042462724758553493051605564336...
に対してのみ,対応する数値解が
(-6.2414826969557199979633340867b-13*%i)-6.38943104254668599248510111018b-1, (-6.95918202422128079528203919324b-12*%i)-6.38943104241533885902022292701b-1, 7.58333029391685279498189770221b-12*%i-6.38943104242614942415515511763b-1
のようにばらけますが,相加平均をとると
(-3.21582999003662290927010077574b-32*%i)-6.38943104246272475855349305161b-1
となり,この実部として,30 桁精度のサンプルが得られます.