[petsc-dev] [petsc-maint #74896] Re: What was the 64-bit problem with pow()?
Jed Brown
jed at 59A2.org
Wed Jun 1 09:06:24 CDT 2011
On Wed, Jun 1, 2011 at 14:51, Matthew Knepley <knepley at gmail.com> wrote:
>
>> Isn't it casting to PowInt which is int?
>
>
> Not exactly. If I define
>
> #define PetscPowScalar(a, b) std::pow(a, (int) b)
>
Barry was not suggesting this.
>
> then this call
>
> PetscPowScalar(2.0, 0.333)
>
> will not work correctly. If I do not, then
>
> PetscPowScalar(2.0, 3)
>
> will fail when using --with-64-bit-indices. The only solution I saw was for
> the user
> to do the cast explicitly
>
We're not saying PetscPowScalar(base,(int)i) is necessarily bad, but we
think
#if defined(PETSC_USE_64BIT_INDICES)
typedef int PowInt;
#else
typedef PetscInt PowInt;
#endif
is a pretty ugly way to spell
typedef int PowInt; /* explanation why */
or even just calling PetscPowScalar(base,(int)i) instead of
PetscPowScalar(base,(PowInt)i).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20110601/c6e7a98c/attachment.html>
More information about the petsc-dev
mailing list