_polyRoots_prop as = (length as > 1) ==>

all (( check x && check prev > check x

check = abs . horner as

next = nextafter x +Infinity

prev = nextafter x -Infinity

This doesn’t solve “if these are reasonable properties to expect”, though.

]]>Once I have some more time on my hands, I’ll attempt a proof. :)

]]>This discussion also brings to mind the design of Julia’s isapprox() function:

https://docs.julialang.org/en/v1/base/math/#Base.isapprox

Determining whether two values are approximately equal involves a tolerance which scales with the magnitude of the inputs (this tolerance is usually looser than 1 ULP). But also note their rationale for why with the default tolerances, nothing is ever approximately equal to zero except exact zero itself.

]]>