1c591fd924
Use std::hypot() instead of sqrt() of a sum of squares. This ensures length() can't be zero when isNull() is false. Use length() in QLine::setLength() rather than duplicating that. Clarify and expand some documentation; isNull() never said what constituted validity, nor did unitVector() mention that is should not be used on a line for which isNull() is true. Make clear that lines of denormal length cannot be rescaled accurately. Given that we use fuzzy comparison to determine equality of end-points, isNull() can be false for a line with displacements less than sqrt(numeric_limits<qreal>::denorm_min()) between the coordinates of its end-points (as long as these are not much bigger); squaring these would give zero, hence a zero length, where using hypot() avoids the underflow and gives a non-zero length. Having a zero length for a line with isNull() false would lead to problems in setLength(), which uses an isNull() pre-test, protecting a call to unitVector(). (It was already possible for a null line to have non-zero length; this now arises in more cases.) Restored QLine::setLength() to the form it had before a recent change to avoid division by zero (which resulted from underflow in computing the length of a non-null line) but allow for the possibility that the unit vector it computes as transient may not have length exactly one. Add tests against {ov,und}erflow problems in QLine. Reworked the test added during the divide-by-zero fix to make it part of the existing test. Pick-to: 5.15 5.12 Change-Id: I7b71d66b872ccc08a64e941acd36b45b0ea15fab Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com> |
||
---|---|---|
.. | ||
collections | ||
containerapisymmetry | ||
qalgorithms | ||
qarraydata | ||
qbitarray | ||
qcache | ||
qcommandlineparser | ||
qcontiguouscache | ||
qcryptographichash | ||
qeasingcurve | ||
qexplicitlyshareddatapointer | ||
qflatmap | ||
qfreelist | ||
qhash | ||
qhashfunctions | ||
qline | ||
qlist | ||
qmacautoreleasepool | ||
qmakearray | ||
qmap | ||
qmargins | ||
qmessageauthenticationcode | ||
qoffsetstringarray | ||
qpair | ||
qpoint | ||
qpointf | ||
qqueue | ||
qrect | ||
qringbuffer | ||
qscopedpointer | ||
qscopedvaluerollback | ||
qscopeguard | ||
qset | ||
qsharedpointer | ||
qsize | ||
qsizef | ||
qstl | ||
qtaggedpointer | ||
qtimeline | ||
qvarlengtharray | ||
qversionnumber | ||
.prev_CMakeLists.txt | ||
CMakeLists.txt | ||
tools.pro |