<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>You have both good points.</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature">In that case, if we still want to define new operators here (which might not please everybody), then I'd suggest finding a common prefix or suffix character (e.g. `^/` and `^%`) for both the floored division and floored modulo (for one, because we can't define `//` as an operator).</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature">But I think it'd be clearest to just make them both top-level functions, e.g. `floordiv(p, q)` and `floormod(p, q)`. If anyone uses either a lot, and likes to make it terse, it's easy to define a private operator wrapper for it.</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature">— Pyry<br><br></div><div>Tony Allevato wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">I've had to write a "true mod" function enough times across different projects (usually for circular buffer indexing or angular arithmetic) that it would absolutely support its inclusion in stdlib (for both integer and floating point types).<div><br></div><div>The `%` operator historically has been implemented as "remainder" though (even when called "modulus"), so while it would be nice to be "pure" and have `%` do the right thing, I think it would be too confusing for users to have the operator have a subtly different meaning compared to every other programming language that looks like it.</div><div><br></div><div>I'm not crazy about the `%%` spelling, but I can't think of anything better either at the moment.</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, May 23, 2016 at 12:24 PM Adam Nemecek via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">That kind of breaks backwards compatibility.&nbsp;<div><br></div><div>Also currently in swift, the % operator is called the remainder operator, not the modulo operator, so technically the current implementation is correct. In Haskell for example, there are two functions, rem (as in remainder) and mod (as in modulo). I guess we could leave % to mean remainder and introduce a mod function?<br><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 23, 2016 at 11:59 AM, Pyry Jahkola <span dir="ltr">&lt;<a href="mailto:pyry.jahkola@iki.fi" target="_blank">pyry.jahkola@iki.fi</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>I wouldn't mind if the standard `%` operator worked like this and there would be another top-level function `mod(p, q)` that worked like `%` in C. The only times that I've ever needed the modulo operation (<a href="https://en.wikipedia.org/wiki/Modulo_operation" target="_blank">https://en.wikipedia.org/wiki/Modulo_operation</a>) to behave <i>some way</i> on negative values it's always been the suggested remainder-of-flooring-division way.</div><div><br></div><div>On the other hand, there's a performance penalty (avoidable by using the other mod operation), so I can understand if not everyone agrees.</div><div><br></div><div>And like Steve said below, then we'll need a flooring division function (or operator) as well. And a flooring `(f, r) = divmod(p, q)` too, I suppose.</div><div><br></div><div>In any case, I'm probably +1 if a well-thought proposal is brought to the table.</div><span><font color="#888888"><div><br></div><div>— Pyry</div></font></span><span><div><br>Adam Nemecek wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">Would you want to make this a function? Or an operator but a different one?</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 23, 2016 at 7:30 AM, Stephen Canon <span dir="ltr">&lt;<a href="mailto:scanon@apple.com" target="_blank">scanon@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>I’m not really sold on the `%%` spelling, but I think the operation itself is worth exposing.&nbsp; This is the remainder of a “flooring” division (as opposed to the C-family “truncating” division[1]).&nbsp; If we do provide it, we should also provide the accompanying divide operation.</div><div><br></div><div>– Steve</div><div><br></div><div>[1] there are several other ways to define division beyond these two: remainder is always positive, remainder is closest to zero, etc.&nbsp; Truncating and flooring division are the most common by a wide margin, however.</div></div></blockquote></div></div></div></blockquote></span></div></blockquote></div><br></div>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>
</div></blockquote></body></html>