       RE: Checking for non-complex numerics

• To: mathgroup at smc.vnet.net
• Subject: [mg20994] RE: [mg20983] Checking for non-complex numerics
• From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
• Date: Thu, 2 Dec 1999 21:41:09 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```Mark Diamond wrote:
-------------------------
I would like a function that returns True for non-complex numerics only. To
be more specific, anything that results in NumericQ returning True is OK,
such as Pi, E, 1, -2.6.

a=-1.5;
followed by NonComplexQ[a] should return True. But
NonComplexQ[b] and NonComplexQ[Pi I] should return False as should
NonComplexQ[1.1 + 3 I].

I have been able to a function that satisfies various subsets of these
conditions, but not the whole lot ... yet it seems the kind of problem for
which there should be a simple and obvious solution.

---------------------------

A fullproof version isn't simple.
I give my solution below.

In:=
ZeroImagQ[x_] := Check[
Block[{\$Messages}, Im[ComplexExpand[x]] === 0],
Im[ComplexExpand[FullSimplify[x]]] === 0,
\$MaxExtraPrecision::meprec
]

In:=
NonComplexQ[x_] := NumericQ[x] && ZeroImagQ[x]

------------------------
Below I use NonComplexQ on several examples.

In:=
Clear[t];
f[x_] := ArcSin[x Cos[x] + Sin[x]];
NonComplexQ /@{Pi,2/3,f[49/10],f[51/10],Pi*I,2.3+t,t+3I,2+0.0I}

Out=
{True, True, True, False, False, False, False, False}

Above (t+3I) is not numeric.
Should NonComplexQ[t+3I] return True or False?
Should NonComplexQ[2+0.0 I] return True of False?

f[49/10] is NonComplex, but f[51/10] has a non-zero imaginary part.
We see that in the numeric approximation below.

In:=
{f[49/10], f[51/10]} // N

Out=
{-0.0685958, 1.5708-0.0611755 I}

------------------------------
For most problems the following would work:
NonComplexQ[x_] := NumericQ[x] && (Im[ComplexExpand[x]] === 0)

But the more complicated definition is needed for the next example.

In:=
NonComplexQ[ArcCos[1 + Sqrt + Sqrt - Sqrt[5 + 2Sqrt]]  ]

Out=
True

Here FullSimplify is needed to see that
ArcCos[1 + Sqrt + Sqrt - Sqrt[5 + 2Sqrt]]
simplifies to ArcCos.

Notice my solution only calls on FullSimplify in the rare case where an

--------------------
Regards,
Ted Ersek

For Mathematica tips, tricks see
http://www.dot.net.au/~elisha/ersek/Tricks.html

```

• Prev by Date: Re: How to: Read Notebook and auto-evaluate ?
• Next by Date: Re: Q: Dickman function
• Previous by thread: Re: Checking for non-complex numerics
• Next by thread: Re: Checking for non-complex numerics