Gotcha.
I guess with more sig-figs you'd end up with less problem. But it's still going to bite eventually. Would be nice to use mathematical definitions e.g. cosd(60) and sind(60)... but that is dream land
I'm guessing your connections are often based on the position of only a limited selection of primitives that are defined to be unscalable. If so, you might try rounding the normalised matrix elements (at read time for the part) to the cosine of the nearest 7.5 degree angle (which covers both 22.5 and 30) when the error that would give is smaller than a tolerance.
e.g.
acosd( 0.86603 ) = 29.999
therefore round to 30 (error < 1 degree) and replace by cosd(30) = 0.866025404...
acosd( 0.81 ) = 35.904
leave as is (err > 1 degree)
Perhaps...
I guess with more sig-figs you'd end up with less problem. But it's still going to bite eventually. Would be nice to use mathematical definitions e.g. cosd(60) and sind(60)... but that is dream land
I'm guessing your connections are often based on the position of only a limited selection of primitives that are defined to be unscalable. If so, you might try rounding the normalised matrix elements (at read time for the part) to the cosine of the nearest 7.5 degree angle (which covers both 22.5 and 30) when the error that would give is smaller than a tolerance.
e.g.
acosd( 0.86603 ) = 29.999
therefore round to 30 (error < 1 degree) and replace by cosd(30) = 0.866025404...
acosd( 0.81 ) = 35.904
leave as is (err > 1 degree)
Perhaps...