<div dir="ltr">What I actually want is the &quot;true modulo&quot;, and it should not check for overflow, as it needs to be as fast as possible.<div><br></div><div><div><div>infix operator &amp;%%: MultiplicationPrecedence</div><div><br></div><div>extension FixedWidthInteger {</div><div>    func unsafeTrueModulo(_ v: Self) -&gt; Self {</div><div>        let rem = self % v</div><div>        return rem &gt;= 0 ? rem : rem &amp;+ v</div><div>        // Or:</div><div>        //return (self % v &amp;+ v) % v</div><div>    }</div><div>    static func &amp;%%(lhs: Self, rhs: Self) -&gt; Self {</div><div>        return lhs.unsafeTrueModulo(rhs)</div><div>    }</div><div>}</div></div></div><div><br></div><div>My concern is that if % is checking for overflow, and there is no &amp;%, like there is eg &amp;+, then my &amp;%% is not as fast as it could be.</div><div>(Making sure everything is unchecked in code that is heavily used can sometimes make a huge difference.)</div><div><br></div><div>So, now I have two questions:</div><div><br></div><div>1. Why is there no &amp;% (my original question), is % unchecked?</div><div><div style="font-size:12.800000190734863px">That is, FixedWidthInteger has:</div><div style="font-size:12.800000190734863px">func remainderReportingOverflow(<wbr>dividingBy: Self)</div><div style="font-size:12.800000190734863px">but there is no:<br></div><div style="font-size:12.800000190734863px">func <span class="gmail-il">unsafeRemainder</span>(dividingBy: Self)</div></div><div style="font-size:12.800000190734863px"><br></div><div>2. Does anyone know a better way to implement the &amp;%% above (to be as fast as possible)?<br></div><div><br></div><div>/Jens</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 29, 2017 at 9:13 AM, Jens Persson via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><div dir="ltr"><div>I have some integer processing code that is called very intensively and need to be as fast as possible, I therefore use &amp;+ &amp;- &amp;/ &amp;* instead of + - / * which results in a significant speedup.</div><div><br></div><div>However, I also need to use % and I noticed that there is no &amp;% ... </div><div><br></div><div>That is, FixedWidthInteger has:</div><div>func remainderReportingOverflow(<wbr>dividingBy: Self)</div><div><br></div><div>but there is no:</div><div>func unsafeRemainder(dividingBy: Self)</div><div><br></div><div>which is different from the other …ReportingOverflow-unsafe…-<wbr>pairs:</div><div><br></div><div>func addingReportingOverflow(Self)<br></div><div><div></div></div><div>func subtractingReportingOverflow(<wbr>Self)<br></div><div><div><div><div>func dividedReportingOverflow(by: Self)<br></div><div></div></div><div>func multipliedReportingOverflow(<wbr>by: Self)<br></div><div><br></div><div></div><div>func unsafeAdding(Self)</div><div>func unsafeSubtracting(Self)</div><div>func unsafeMultiplied(by: Self)<br></div><div>func unsafeDivided(by: Self)<br></div><div><br></div></div></div><div>Is this intentional and if so why?</div><div><br></div><div>/Jens</div><div><br></div></div>
</div></div><br>______________________________<wbr>_________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-users</a><br>
<br></blockquote></div><br></div>