Re: Compiler output type
- To: mathgroup at smc.vnet.net
- Subject: [mg132725] Re: Compiler output type
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Mon, 12 May 2014 22:26:34 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- References: <20140512044303.976186A56@smc.vnet.net>
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 at 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
>
>
- References:
- Compiler output type
- From: "Harvey P. Dale" <hpd@hpdale.org>
- Compiler output type