… | |
… | |
1726 | const ev_tstamp shift = sizeof (unsigned long) >= 8 ? 10000000000000000000. : 1000000000.; |
1726 | const ev_tstamp shift = sizeof (unsigned long) >= 8 ? 10000000000000000000. : 1000000000.; |
1727 | #else |
1727 | #else |
1728 | const ev_tstamp shift = sizeof (unsigned long) >= 8 ? 18446744073709551616. : 4294967296.; |
1728 | const ev_tstamp shift = sizeof (unsigned long) >= 8 ? 18446744073709551616. : 4294967296.; |
1729 | #endif |
1729 | #endif |
1730 | |
1730 | |
|
|
1731 | /* special treatment for negative arguments */ |
|
|
1732 | if (ecb_expect_false (v < 0.)) |
|
|
1733 | { |
|
|
1734 | ev_tstamp f = -ev_floor (-v); |
|
|
1735 | |
|
|
1736 | return f - (f == v ? 0 : 1); |
|
|
1737 | } |
|
|
1738 | |
1731 | /* argument too large for an unsigned long? */ |
1739 | /* argument too large for an unsigned long? then reduce it */ |
1732 | if (ecb_expect_false (v >= shift)) |
1740 | if (ecb_expect_false (v >= shift)) |
1733 | { |
1741 | { |
1734 | ev_tstamp f; |
1742 | ev_tstamp f; |
1735 | |
1743 | |
1736 | if (v == v - 1.) |
1744 | if (v == v - 1.) |
1737 | return v; /* very large number */ |
1745 | return v; /* very large numbers are assumed to be integer */ |
1738 | |
1746 | |
1739 | f = shift * ev_floor (v * (1. / shift)); |
1747 | f = shift * ev_floor (v * (1. / shift)); |
1740 | return f + ev_floor (v - f); |
1748 | return f + ev_floor (v - f); |
1741 | } |
|
|
1742 | |
|
|
1743 | /* special treatment for negative args? */ |
|
|
1744 | if (ecb_expect_false (v < 0.)) |
|
|
1745 | { |
|
|
1746 | ev_tstamp f = -ev_floor (-v); |
|
|
1747 | |
|
|
1748 | return f - (f == v ? 0 : 1); |
|
|
1749 | } |
1749 | } |
1750 | |
1750 | |
1751 | /* fits into an unsigned long */ |
1751 | /* fits into an unsigned long */ |
1752 | return (unsigned long)v; |
1752 | return (unsigned long)v; |
1753 | } |
1753 | } |