+ if (isinf (d[X_AXIS]))
+ {
+ if (!isinf (d[Y_AXIS]))
+ return Offset ((d[X_AXIS] > 0.0 ? 1.0 : -1.0), 0.0);
+ }
+ else if (isinf (d[Y_AXIS]))
+ return Offset (0.0, (d[Y_AXIS] > 0.0 ? 1.0 : -1.0));
+ else if (d[X_AXIS] == 0.0 && d[Y_AXIS] == 0.0)
+ return d;
+ // The other cases propagate or produce NaN as appropriate.
+