[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