Re: IsIntegerOrFloat

• To: mathgroup at smc.vnet.net
• Subject: [mg87051] Re: IsIntegerOrFloat
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Sun, 30 Mar 2008 01:16:49 -0500 (EST)
• Organization: The Open University, Milton Keynes, UK
• References: <fsl214\$g77\$1@smc.vnet.net>

```carlos at colorado.edu wrote:

> I need a function
>
>                  IsIntegerOrFloat[expr]
>
> that returns True if expr, which is generally a flat list, contains
> only integers or floating point numbers, and False otherwise.
> Rational numbers such as 1/2 are considered symbolic for this test; so is
> \[Pi] or Sqrt[5]. Appearance of any symbol, as in 2.0*a+3.5, makes it False.
> As in previous questions, this should work on versions >=4.0.

<snip>

The following should do what you are looking for (compatible with 4.0+)
at a reasonable speed (~200,000 entries processed in about 0.5 second)

IsIntegerOrFloat[expr_] :=
Cases[expr,
x_ /; Not[Head[x] === Integer || Head[x] === Real] -> False, 1,
1] /. {False} -> False /. {} -> True

Some tests and benchmarking follows.

In[1]:= IsIntegerOrFloat[expr_] :=
Cases[expr,
x_ /; Not[Head[x] === Integer || Head[x] === Real] -> False, 1,
1] /. {False} -> False /. {} -> True

In[2]:= data = {1, 1., Pi, 1/2, 2.0*a + 3.5};
IsIntegerOrFloat@data

Out[3]= {Integer, Real, Symbol, Rational, Plus}

Out[4]= False

In[5]:= data = {1, 1., N@Pi, N@1/2, 2.0*a + 3.5 /. a -> 1};
IsIntegerOrFloat@data

Out[6]= {Integer, Real, Real, Real, Real}

Out[7]= True

In[8]:= tst =
Join[{a}, RandomInteger[{-1000, 1000}, {10^5}],
RandomReal[{0, 1}, {10^5}]];
IsIntegerOrFloat@tst // Timing

tst = Join[RandomInteger[{-1000, 1000}, {10^5}], {a},
RandomReal[{0, 1}, {10^5}]];
IsIntegerOrFloat@tst // Timing

tst = Join[RandomInteger[{-1000, 1000}, {10^5}],
RandomReal[{0, 1}, {10^5}], {a}];
IsIntegerOrFloat@tst // Timing

tst = Join[RandomInteger[{-1000, 1000}, {10^5}],
RandomReal[{0, 1}, {10^5}]];
IsIntegerOrFloat@tst // Timing

Out[9]= {0.003186, False}

Out[11]= {0.227702, False}

Out[13]= {0.50994, False}

Out[15]= {0.50495, True}

Regards,
--
Jean-Marc

```

• Prev by Date: Re: Re: Wrapping text to fit a rectangle
• Next by Date: Re: Re: The FinancialData Function
• Previous by thread: Re: IsIntegerOrFloat
• Next by thread: Re: IsIntegerOrFloat