<div>On Sun, Jun 18, 2017 at 05:30 Ben Rimmington &lt;<a href="mailto:me@benrimmington.com">me@benrimmington.com</a>&gt; wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Re: &lt;<a href="https://gist.github.com/xwu/d68baefaae9e9291d2e65bd12ad51be2#integers-from-a-floating-point-source" rel="noreferrer" target="_blank">https://gist.github.com/xwu/d68baefaae9e9291d2e65bd12ad51be2#integers-from-a-floating-point-source</a>&gt;<br>
<br>
There are also some commented-out requirements, which were accepted for SE-0067.<br>
<br>
(One requirement is obsoleted by the Numeric protocol).<br>
<br>
Can these be implemented yet, based on your experience?</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"></blockquote><div><br></div><div>Based on a cursory thinking through only:</div><div><br></div><div>The first one, yes (if we observe that Integer is now BinaryInteger), but probably inefficiently as it would have to use `words`, I think. If the requirement were on BinaryFloatingPoint and T were constrained to BinaryInteger &amp; FixedWidthInteger, I think it could be more efficient. Of course, both could be added. We could not remove the concrete initializer from a UInt source, though, as initializing from `words` would rely on that.</div><div><br></div><div>The second one, I think so, but I haven&#39;t tried to make sure.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
FloatingPoint<br>
-------------<br>
<br>
&lt;<a href="https://github.com/apple/swift/blob/5ec0563c167a720e8c2c99390df6e032a24f2403/stdlib/public/core/FloatingPoint.swift.gyb#L256-L273" rel="noreferrer" target="_blank">https://github.com/apple/swift/blob/5ec0563c167a720e8c2c99390df6e032a24f2403/stdlib/public/core/FloatingPoint.swift.gyb#L256-L273</a>&gt;<br>
<br>
&gt;   /*  TODO: Implement the following APIs once a revised integer protocol is<br>
&gt;       introduced that allows for them to be implemented. In particular, we<br>
&gt;       need to have an &quot;index of most significant bit&quot; operation and &quot;get<br>
&gt;       absolute value as unsigned type&quot; operation on the Integer protocol.<br>
&gt;<br>
&gt;   /// Creates the closest representable value to the given integer.<br>
&gt;   ///<br>
&gt;   /// - Parameter value: The integer to represent as a floating-point value.<br>
&gt;   init&lt;Source: Integer&gt;(_ value: Source)<br>
&gt;<br>
&gt;   /// Creates a value that exactly represents the given integer.<br>
&gt;   ///<br>
&gt;   /// If the given integer is outside the representable range of the type, the<br>
&gt;   /// result is `nil`.<br>
&gt;   ///<br>
&gt;   /// - Parameter value: The integer to represent as a floating-point value.<br>
&gt;   init?&lt;Source: Integer&gt;(exactly value: Source)<br>
&gt;   */<br>
<br>
BinaryFloatingPoint<br>
-------------------<br>
<br>
&lt;<a href="https://github.com/apple/swift/blob/5ec0563c167a720e8c2c99390df6e032a24f2403/stdlib/public/core/FloatingPoint.swift.gyb#L1476-L1491" rel="noreferrer" target="_blank">https://github.com/apple/swift/blob/5ec0563c167a720e8c2c99390df6e032a24f2403/stdlib/public/core/FloatingPoint.swift.gyb#L1476-L1491</a>&gt;<br>
<br>
&gt;   /*  TODO: Implement these once it becomes possible to do so (requires revised<br>
&gt;       Integer protocol).<br>
&gt;   /// Creates a new instance from the given value, rounded to the closest<br>
&gt;   /// possible representation.<br>
&gt;   ///<br>
&gt;   /// - Parameter value: A floating-point value.<br>
&gt;   init&lt;Source: BinaryFloatingPoint&gt;(_ value: Source)<br>
&gt;<br>
&gt;   /// Creates a new instance equivalent to the exact given value.<br>
&gt;   ///<br>
&gt;   /// If the value you pass as `value` can&#39;t be represented exactly, the result<br>
&gt;   /// of this initializer is `nil`.<br>
&gt;   ///<br>
&gt;   /// - Parameter value: A floating-point value to represent.<br>
&gt;   init?&lt;Source: BinaryFloatingPoint&gt;(exactly value: Source)<br>
&gt;   */<br>
<br>
</blockquote></div></div>