<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="font-size:13px">- I remain unconvinced that defining an Arithmetic that includes both exact and floating-point numbers is a good idea. All of the arguments from Swift 1 and 2 about why we didn&#39;t include this still seem relevant. To phrase it in generic programming terms, what algorithm would be generic over Arithmetic?</div></blockquote><div><br></div><div>E.g. generic point/size/rect types.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="im" style="font-size:13px">&gt; For Integer, does the presence of signBit indicate an expectation that signed Integers will have a two&#39;s complement representation?<br></span><span style="font-size:13px">Yes. That is correct.</span></blockquote><div><br></div><div>So would this require a BigInt implementation to be in two&#39;s complement also? Most BigInt implementations use a separate sign I think, not sure if that&#39;s for performance reasons or merely convenience though.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 24, 2016 at 7:40 AM, Jordan Rose via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@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 style="word-wrap:break-word"><div>Oh, one more comment: I suggest naming the primary protocol something other than &quot;Integer&quot;, which IMHO is a little close to &quot;Int&quot; for a beginner. &quot;Integral&quot; is a bit too ambiguous, but maybe &quot;IntegerArithmetic&quot; or &quot;ArithmeticInteger&quot;? Or to go with the representation thing, &quot;BinaryInteger&quot;? (Some of the requirements are at odds with a decimal-based implementation.)</div><div><br></div><div>Jordan</div><div><div class="h5"><div><br></div><br><div><blockquote type="cite"><div>On Jun 23, 2016, at 13:50, Jordan Rose &lt;<a href="mailto:jordan_rose@apple.com" target="_blank">jordan_rose@apple.com</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word">Hey, standard library folks. Glad we&#39;re doing this one. :-)<div><br></div><div>- I remain unconvinced that defining an Arithmetic that includes both exact and floating-point numbers is a good idea. All of the arguments from Swift 1 and 2 about why we didn&#39;t include this still seem relevant. To phrase it in generic programming terms, what algorithm would be generic over Arithmetic?</div><div><br></div><div><br></div><div>- What is Integer.init&lt;T: FloatingPoint&gt;(_:) supposed to do if the floating-point value is larger than the maximum representable integer? Smaller than the minimum? (As a special case, negative, when the integer type is unsigned?) Infinity? NaN?</div><div><br></div><div>- Integer.init&lt;T: Integer&gt;(_:) currently says &quot;if it is representable&quot;. It should say something like &quot;trapping if it is not representable&quot;.</div><div><br></div><div>- I find it odd that Integer.init(clamping:) privileges the bounds of fixed-width integers. I was going to suggest it should take a range to clamp to that <i>defaults</i> to the min and max, but that&#39;s not implementable for a BigInt.</div><div><br></div><div>- nthWord should count &quot;from least-significant to most-significant&quot; rather than &quot;from the right&quot;.</div><div><br></div><div>- As mentioned before, it sounds like Integer requires a two&#39;s complement representation (if only so the result of nthWord can be interpreted correctly). That should probably be in the doc comment for the protocol.</div><div><br></div><div>- Why is bitWidth in bits but nthWord in words? (I know there&#39;s a good answer to this, but using them together seems like it will be common.)</div><div><br></div><div>- It&#39;s also probably worth calling out <i>even more explicitly</i> that bitWidth is a <i>representation</i> property, not a <i>value</i> property. That is, a BigInt with the value &quot;1&quot; could have a bitWidth of 1, 8, or 128.</div><div><br></div><div>- What does signBitIndex return if self is positive? I ask because it&#39;s just not in the doc comment, but thinking about the answer made it obvious that the correct return value for 0 is 0.</div><div><br></div><div>- For signed integers, does remainder(dividingBy:) have specified behavior for the sign of the result? See <a href="https://en.wikipedia.org/wiki/Modulo_operation" target="_blank">https://en.wikipedia.org/wiki/Modulo_operation</a>.</div><div><br></div><div><div>- I do think having Swift.abs(_:) and Integer.absoluteValue is confusing, but I don&#39;t know what to do about it.</div></div><div><br></div><div><br></div><div>- Why are bitwise operations limited to fixed-width integers? I see &quot;The only difference is that because shifting left truncates the high bits of fixed-width integers, it is hard to define what a left shift would mean to an arbitrary-precision integer&quot; further down, but I would just assume it wouldn&#39;t truncate (i.e. it would be a pure multiplication by two).</div><div><br></div><div>- Is there a requirement about left-shifting into the sign bit, for &#39;&lt;&lt;&#39; and for &#39;&amp;&lt;&lt;&#39;?</div><div><div><br></div><div>- What is the ArithmeticOverflow type?</div><div><br></div><div>- When does the remainder operation overflow? (I just can&#39;t remember.)</div><div><br></div><div>- I feel a little weird having &quot;someValue.and(mask)&quot;. Maybe bitwiseAnd or bitwiseAND to be more explicit?</div><div><br></div></div><div>- maskingShiftLeft/Right seem underspecified in their doc comments. Why can&#39;t the protocol requirement just assume the shift amount has already been masked, instead of performing the masking themselves? Is it because we won&#39;t be able to optimize that away?</div><div><br></div><div>I think that&#39;s about it. Great work, all!</div><div>Jordan</div></div></div></blockquote></div><br></div></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">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>
<br></blockquote></div><br></div>