Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Compiler output type
Replies: 1   Last Post: May 12, 2014 10:26 PM

 Bob Hanlon Posts: 906 Registered: 10/29/11
Re: Compiler output type
Posted: May 12, 2014 10:26 PM

collatz = Compile[{{n, _Integer}}, If[EvenQ[n], n/2, 3 n + 1] //
IntegerPart];

collatz2 = Compile[{{n, _Integer}}, If[EvenQ[n], n/2, 3 n + 1] // Round];

m = 1000000;

Timing[t1 = Table[collatz[n], {n, m}];]

{0.291132, Null}

Timing[t2 = Table[collatz2[n], {n, m}];]

{0.322116, Null}

Timing[t3 = Table[If[EvenQ[n], n/2, 3 n + 1], {n, m}];]

{2.352646, Null}

t1 == t2 == t3

True

Bob Hanlon

On Mon, May 12, 2014 at 12:43 AM, Harvey P. Dale <hpd@hpdale.org> wrote:

> Some compiled functions yield reals even if the input and
> necessary output are integers. How can I force the output to be an integer
> rather than a real in such cases? To be clear, not all compiled program
> output produces reals; some compiled programs, given integer inputs,
> produce integer outputs. But some do not. An example is:
>
> collatz = Compile[{{n, _Integer}}, If[EvenQ[n], n/2, 3 n + 1]]
>
> It produces real rather than integer output, and I'd like to force integer
> output if possible.
>
> Thanks
>
> Best,
>
> Harvey
>
>