It was late... but the penny dropped this morning.   Consider the domain of log (x) for x&lt;0.<br><br><div class="gmail_quote">On Thu, May 10, 2012 at 8:38 AM, Vincent St-Amour <span dir="ltr">&lt;<a href="mailto:stamourv@ccs.neu.edu" target="_blank">stamourv@ccs.neu.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">As Neil said, `fllog&#39; is guaranteed to return floats.<br>
<br>
If you want to know for which input types `log&#39; has a return type of<br>
`Float&#39;, you can use `:query-result-type&#39; at the TR REPL.<br>
<br>
    -&gt; (:query-result-type log Float)<br>
    (case-&gt; (Nonnegative-Flonum -&gt; Float) (Float-Zero -&gt; Negative-Float))<br>
<br>
If you can&#39;t restrict the input type, the solution you mention (adding a<br>
runtime assertion) is perfectly fine, but does involve a check at runtime.<br>
<br>
Vincent<br>
<br>
<br>
At Wed, 9 May 2012 23:52:42 -0400,<br>
Ray Racine wrote:<br>
&gt;<br>
&gt; [1  &lt;multipart/alternative (7bit)&gt;]<br>
&gt; [1.1  &lt;text/plain; ISO-8859-1 (7bit)&gt;]<br>
<div><div class="h5">&gt; The Typed Racket Performance button in DrRacket informs me that (log v)<br>
&gt; returns a Complex type, despite all its arguments being reals and that if I<br>
&gt; do not want or expect a complex number as results, I mam restrict the type<br>
&gt; of the arguments.  How does one do that?<br>
&gt;<br>
&gt; #lang typed/racket/base<br>
&gt;<br>
&gt; (: real-log (Float -&gt; Float))<br>
&gt;  (define (real-log v)<br>
&gt;    (assert (log v) flonum?))<br>
</div></div>&gt; [1.2  &lt;text/html; ISO-8859-1 (quoted-printable)&gt;]<br>
&gt;<br>
&gt; [2  &lt;text/plain; us-ascii (7bit)&gt;]<br>
<div class="HOEnZb"><div class="h5">&gt; ____________________<br>
&gt;   Racket Users list:<br>
&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br>