       Re: appending '.' in CForm

• To: mathgroup at smc.vnet.net
• Subject: [mg55453] Re: appending '.' in CForm
• From: Peter Pein <petsie at arcor.de>
• Date: Thu, 24 Mar 2005 03:41:52 -0500 (EST)
• References: <d1rgua\$42h\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Matt Flax wrote:
> Hello,
>
> I have an equation which symbolicly evals. to a 1 MB file when streamed
> to file using CForm ... it is a very very long equation !
>
> I am unsatisfied with the results of CForm, because it writes longs,
> rather then writing doubles out ... for example :
>       314572800*Power(b,2)*Power(d,4)*dr*e*Power(f,6)*Power(t,10)*
>       314572800.0*Power(b,2)*Power(d,4)*dr*e*Power(f,6)*Power(t,10)*
>
> The issue is that the integer aproaches the limit of max. int. which is
> listed in values.h (GNU compiler).
>
> So ... how would I force CForm to print out integers as doubles ?
>
> thanks
> Matt
Hi Matt,

if you've got a polynomial equaltion, the following should work:

int2double[expr_] := expr //. (f:Plus | Times)[a___, i_Integer, b___] :>
f[a, N[i, Ceiling[Log[10, Abs[i]]]], b]

let's try it:
test = Sum[(-1)^Random[Integer]*Random[Integer, {10^10, 10^12}]*x^j,
{j, -1, 2}]
==>
-989314302571 - 259078934146/x + 755768626052*x + 10188600055*x^2

CForm[int2double[test]]
==>
-9.89314302571e11 - 2.59078934146e11/x + 7.55768626052e11*x +
1.0188600055e10*Power(x,2)

seems OK.

--
Peter Pein
Berlin

```

• Prev by Date: Re: ReplaceAll / sequential replacements versus joint replacement
• Next by Date: Re: Newbie Question About An Error Message
• Previous by thread: Re: appending '.' in CForm