Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2014

[Date Index] [Thread Index] [Author Index]

Search the Archive

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
>
>




  • Prev by Date: Re: Compiler output type
  • Next by Date: Re: DSolve test
  • Previous by thread: Compiler output type
  • Next by thread: Re: Compiler output type