2173d2172
< destElem = (Element)1 << (sizeof(Element) * 8 - 1);
2175c2174,2178
< destElem -= 1;
---
> /* If (>=0) plus (>=0) yields (<0), saturate to +. */
> destElem = std::numeric_limits<Element>::max();
> else
> /* If (<0) plus (<0) yields (>=0), saturate to -. */
> destElem = std::numeric_limits<Element>::min();
2202d2204
< destElem = (Element)1 << (sizeof(Element) * 8 - 1);
2204c2206,2210
< destElem -= 1;
---
> /* If (>=0) minus (<0) yields (<0), saturate to +. */
> destElem = std::numeric_limits<Element>::max();
> else
> /* If (<0) minus (>=0) yields (>=0), saturate to -. */
> destElem = std::numeric_limits<Element>::min();
2517c2523
< Element maxNeg = (Element)1 << (sizeof(Element) * 8 - 1);
---
> Element maxNeg = std::numeric_limits<Element>::min();
2542c2548
< Element maxNeg = (Element)1 << (sizeof(Element) * 8 - 1);
---
> Element maxNeg = std::numeric_limits<Element>::min();
2568,2569c2574
< srcElem1 == (Element)((Element)1 <<
< (Element)(sizeof(Element) * 8 - 1))) {
---
> srcElem1 == (Element)(std::numeric_limits<Element>::min())) {
2614,2615c2619
< srcElem1 == (Element)((Element)1 <<
< (sizeof(Element) * 8 - 1))) {
---
> srcElem1 == (Element)(std::numeric_limits<Element>::min())) {
2629c2633
< Element maxNeg = (Element)1 << (sizeof(Element) * 8 - 1);
---
> Element maxNeg = std::numeric_limits<Element>::min();
2637c2641
< destElem = (Element)1 << (sizeof(Element) * 8 - 1);
---
> destElem = std::numeric_limits<Element>::min();
2976c2980
< destElem = (Element)1 << (sizeof(Element) * 8 - 1);
---
> destElem = std::numeric_limits<Element>::min();
2989c2993
< destElem = (Element)1 << (sizeof(Element) * 8 - 1);
---
> destElem = std::numeric_limits<Element>::min();
3492c3496
< if (srcElem1 == (Element)((Element)1 << (sizeof(Element) * 8 - 1))) {
---
> if (srcElem1 == (Element)(std::numeric_limits<Element>::min())) {
3507c3511
< if (srcElem1 == (Element)((Element)1 << (sizeof(Element) * 8 - 1))) {
---
> if (srcElem1 == (Element)(std::numeric_limits<Element>::min())) {