MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / xsum_large_add_sqnorm

Function xsum_large_add_sqnorm

xs/sources/xsum.c:1645–1801  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1643/* ADD SQUARED NORM OF VECTOR OF FLOATING-POINT NUMBERS TO LARGE ACCUMULATOR. */
1644
1645void xsum_large_add_sqnorm (xsum_large_accumulator *restrict lacc,
1646 const xsum_flt *restrict vec,
1647 xsum_length n)
1648{
1649 if (xsum_debug) c_printf("\nLARGE ADD_SQNORM OF %ld VALUES\n",(long)n);
1650
1651# if OPT_LARGE_SQNORM
1652 {
1653 xsum_lcount count;
1654 xsum_expint ix;
1655 xsum_uint uintv;
1656 double fltv;
1657
1658 while (n > 3)
1659 {
1660 fltv = *vec * *vec;
1661 COPY64 (uintv, fltv);
1662 vec += 1;
1663
1664 ix = uintv >> XSUM_MANTISSA_BITS;
1665
1666 count = lacc->count[ix] - 1;
1667
1668 if (count < 0)
1669 { xsum_large_add_value_inf_nan (lacc, ix, uintv);
1670 }
1671 else
1672 { lacc->count[ix] = count;
1673 lacc->chunk[ix] += uintv;
1674 }
1675
1676 fltv = *vec * *vec;
1677 COPY64 (uintv, fltv);
1678 vec += 1;
1679
1680 ix = uintv >> XSUM_MANTISSA_BITS;
1681
1682 count = lacc->count[ix] - 1;
1683
1684 if (count < 0)
1685 { xsum_large_add_value_inf_nan (lacc, ix, uintv);
1686 }
1687 else
1688 { lacc->count[ix] = count;
1689 lacc->chunk[ix] += uintv;
1690 }
1691
1692 fltv = *vec * *vec;
1693 COPY64 (uintv, fltv);
1694 vec += 1;
1695
1696 ix = uintv >> XSUM_MANTISSA_BITS;
1697
1698 count = lacc->count[ix] - 1;
1699
1700 if (count < 0)
1701 { xsum_large_add_value_inf_nan (lacc, ix, uintv);
1702 }

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected