MathGroup Archive 2008

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

Search the Archive

Re: IsIntegerOrFloat

  • To: mathgroup at smc.vnet.net
  • Subject: [mg87098] Re: IsIntegerOrFloat
  • From: Albert Retey <awnl at arcor.net>
  • Date: Mon, 31 Mar 2008 04:52:15 -0500 (EST)
  • References: <200803290921.EAA16390@smc.vnet.net> <fsnbfs$dcg$1@smc.vnet.net> <fsq2m6$h8g$1@smc.vnet.net>

Hi,

> (* Albert Retey's submission not tested since it wasnt
>    wrapped as function *)

I just wanted to mention that it is just as good wrapped as a function 
as the others, it just makes definitions for more than one kind of 
arguments:

IIOF5[n_Real] := True
IIOF5[n_Integer] := True
IIOF5[lst_List] := And @@ (IIOF5/@ lst)
IIOF5[___] := False

You can use IIOF5 just as any function with just one definition.
I think this i a very common and useful technique in mathematica, 
especially for functions like this, which shall return either True or 
False for any kind of argument given (in mathematica, these usually end 
with Q for Question).

If speed matters - as you have indicated with your comparisons - IIOF5 
comes out as second best only, so you might also consider this:

IIOF6[expr_List] :=
  Union[Union[data[[All, 0]]], {Real, Integer}] == Union[{Integer, Real}]

timings:

{#, Timing[#[data];][[1]]} & /@ {IIOF1, IIOF2, IIOF3, IIOF4, IIOF5,
    IIOF6}

{
  {IIOF1, 0.641},
  {IIOF2, 3.593},
  {IIOF3, 4.079},
  {IIOF4, 4.156},
  {IIOF5, 1.094},
  {IIOF6, 0.265}
}

 > I have no idea why IIOF1 is about 6 times faster than the others.

In general things like this are not always easy to explain. In this case 
it looks like the use of pattern matching vs. extraction of heads seams 
to be crucial to improve speed. This was also what made me come up with 
IIOF6...

hth,

albert


  • Prev by Date: Re: The FinancialData Function
  • Next by Date: Re: Rotate axes label in 3D graphics
  • Previous by thread: Re: IsIntegerOrFloat
  • Next by thread: Re: IsIntegerOrFloat