Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #38424 > unrolled thread

Re: Has Android different floats?

Started by"Arne Vajhøj" <arne vajhøj@1:261/38.remove-i5b-this>
First post2018-06-24 15:21 -0500
Last post2018-06-24 16:08 -0500
Articles 6 — 3 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  Re: Has Android different floats? "Arne Vajhøj" <arne vajhøj@1:261/38.remove-i5b-this> - 2018-06-24 15:21 -0500
    Re: Has Android different floats? "bursejan" <bursejan@1:261/38.remove-i5b-this> - 2018-06-24 13:31 -0500
      Re: Has Android different floats? "bursejan" <bursejan@1:261/38.remove-i5b-this> - 2018-06-24 13:35 -0500
        Re: Has Android different floats? "bursejan" <bursejan@1:261/38.remove-i5b-this> - 2018-06-24 13:44 -0500
        Re: Has Android different floats? "Eric Sosman" <eric.sosman@1:261/38.remove-i5b-this> - 2018-06-24 17:28 -0500
          Re: Has Android different floats? "bursejan" <bursejan@1:261/38.remove-i5b-this> - 2018-06-24 16:08 -0500

#38424 — Re: Has Android different floats?

From"Arne Vajhøj" <arne vajhøj@1:261/38.remove-i5b-this>
Date2018-06-24 15:21 -0500
SubjectRe: Has Android different floats?
Message-ID<5B329ADB.1163.ucljprogr@castlerockbbs.com>
  To: j4n bur53
From: "=?UTF-8?Q?Arne_VajhĆøj?=" <=?utf-8?q?arne_vajhĆøj?=@1:261/38.rem
ove-101j-this>

  To: j4n bur53
From: =?UTF-8?Q?Arne_VajhĆøj?= <arne@vajhoej.dk>

On 6/24/2018 2:41 PM, j4n bur53 wrote:
> Running a simple test.
> ** is Math.pow(),
> ^ is BigInteger.pow() and then BigInteger.doubleValue().
>
> On Java:
>
>  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
>  ā  15-0.0

>  ā  23-1.6777216E7

>  ā  29-0.0
>  ā  30-0.0
>
> On Adroid:
>
>  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
>  ā  15-0.0

>  ā  23-0.0

>  ā  29-1.7592186044416E13
>  ā  30-0.0
>
> Has Android different floats?
> Tested jdk1.8.0_152 against Android 8.0.0

ARM supposedly use standard IEEE 754 FP.

But I wonder if usage of strictfp would change your results.

Arne

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)

[toc] | [next] | [standalone]


#38425

From"bursejan" <bursejan@1:261/38.remove-i5b-this>
Date2018-06-24 13:31 -0500
Message-ID<5B329ADB.1164.ucljprogr@castlerockbbs.com>
In reply to#38424
  To: =?UTF-8?Q?Arne_Vajh=c3=b8j?=
From: "bursejan" <bursejan@1:261/38.remove-101j-this>

  To: =?UTF-8?Q?Arne_Vajh=c3=b8j?=
From: bursejan@gmail.com

You cannot use the strictfp keyword in front of Math.pow(). Thats only for the
basic operations.

Math.pow() itself is implemented in JDK 1.8 as follows:

    public static double pow(double a, double b) {
        return StrictMath.pow(a, b); // default impl. delegates to StrictMath
    }

Am Sonntag, 24. Juni 2018 21:21:57 UTC+2 schrieb Arne VajhÄ,j:
> On 6/24/2018 2:41 PM, j4n bur53 wrote:
> > Running a simple test.
> > ** is Math.pow(),
> > ^ is BigInteger.pow() and then BigInteger.doubleValue().
> >
> > On Java:
> >
> >  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
> >  ā  15-0.0
>
> >  ā  23-1.6777216E7
>
> >  ā  29-0.0
> >  ā  30-0.0
> >
> > On Adroid:
> >
> >  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
> >  ā  15-0.0
>
> >  ā  23-0.0
>
> >  ā  29-1.7592186044416E13
> >  ā  30-0.0
> >
> > Has Android different floats?
> > Tested jdk1.8.0_152 against Android 8.0.0
>
> ARM supposedly use standard IEEE 754 FP.
>
> But I wonder if usage of strictfp would change your results.
>
> Arne

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)

[toc] | [prev] | [next] | [standalone]


#38426

From"bursejan" <bursejan@1:261/38.remove-i5b-this>
Date2018-06-24 13:35 -0500
Message-ID<5B329ADB.1165.ucljprogr@castlerockbbs.com>
In reply to#38425
  To: bursejan
From: "bursejan" <bursejan@1:261/38.remove-101j-this>

  To: bursejan
From: bursejan@gmail.com

The test code would be:

        for (int i=22; i<25; i++) {
           System.out.println("Math.pow(10,"+i+")="+Math.pow(10,i));
        }

The result (without strictfp modifier to main()) is:

   Math.pow(10,22)=1.0E22
   Math.pow(10,23)=1.0000000000000001E23
   Math.pow(10,24)=1.0E24

The result (with strictfp modifier to main()) is:

   Math.pow(10,22)=1.0E22
   Math.pow(10,23)=1.0000000000000001E23
   Math.pow(10,24)=1.0E24

Because invoking Math.pow() is not a basic operator +, *, /, etc..

Am Sonntag, 24. Juni 2018 22:31:44 UTC+2 schrieb burs...@gmail.com:
> You cannot use the strictfp keyword in front
> of Math.pow(). Thats only for the basic operations.
>
> Math.pow() itself is implemented in JDK 1.8 as follows:
>
>     public static double pow(double a, double b) {
>         return StrictMath.pow(a, b); // default impl. delegates to StrictMath
>     }
>
> Am Sonntag, 24. Juni 2018 21:21:57 UTC+2 schrieb Arne VajhÄ,j:
> > On 6/24/2018 2:41 PM, j4n bur53 wrote:
> > > Running a simple test.
> > > ** is Math.pow(),
> > > ^ is BigInteger.pow() and then BigInteger.doubleValue().
> > >
> > > On Java:
> > >
> > >  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
> > >  ā  15-0.0
> >
> > >  ā  23-1.6777216E7
> >
> > >  ā  29-0.0
> > >  ā  30-0.0
> > >
> > > On Adroid:
> > >
> > >  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
> > >  ā  15-0.0
> >
> > >  ā  23-0.0
> >
> > >  ā  29-1.7592186044416E13
> > >  ā  30-0.0
> > >
> > > Has Android different floats?
> > > Tested jdk1.8.0_152 against Android 8.0.0
> >
> > ARM supposedly use standard IEEE 754 FP.
> >
> > But I wonder if usage of strictfp would change your results.
> >
> > Arne

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)

[toc] | [prev] | [next] | [standalone]


#38427

From"bursejan" <bursejan@1:261/38.remove-i5b-this>
Date2018-06-24 13:44 -0500
Message-ID<5B329ADB.1166.ucljprogr@castlerockbbs.com>
In reply to#38426
  To: bursejan
From: "bursejan" <bursejan@1:261/38.remove-101j-this>

  To: bursejan
From: bursejan@gmail.com

You can try the same Java code on a Android device. The result will be (Android
 8.0.0):

   Math.pow(10,22)=1.0E22
   Math.pow(10,23)=9.999999999999999E22
   Math.pow(10,24)=1.0E24

I used AIDE-IDE to compile and run the Java directly on the device.

But the above is not the same test case as in my initial post. My initial post
also

tests BigInteger.pow() and BigInteger.doubleValue().

Am Sonntag, 24. Juni 2018 22:35:50 UTC+2 schrieb burs...@gmail.com:
> The test code would be:
>
>         for (int i=22; i<25; i++) {
>            System.out.println("Math.pow(10,"+i+")="+Math.pow(10,i));
>         }
>
> The result (without strictfp modifier to main()) is:
>
>    Math.pow(10,22)=1.0E22
>    Math.pow(10,23)=1.0000000000000001E23
>    Math.pow(10,24)=1.0E24
>
> The result (with strictfp modifier to main()) is:
>
>    Math.pow(10,22)=1.0E22
>    Math.pow(10,23)=1.0000000000000001E23
>    Math.pow(10,24)=1.0E24
>
> Because invoking Math.pow() is not a basic operator +, *, /, etc..
>
> Am Sonntag, 24. Juni 2018 22:31:44 UTC+2 schrieb burs...@gmail.com:
> > You cannot use the strictfp keyword in front
> > of Math.pow(). Thats only for the basic operations.
> >
> > Math.pow() itself is implemented in JDK 1.8 as follows:
> >
> >     public static double pow(double a, double b) {
> >         return StrictMath.pow(a, b); // default impl. delegates to
StrictMath
> >     }
> >
> > Am Sonntag, 24. Juni 2018 21:21:57 UTC+2 schrieb Arne VajhÄ,j:
> > > On 6/24/2018 2:41 PM, j4n bur53 wrote:
> > > > Running a simple test.
> > > > ** is Math.pow(),
> > > > ^ is BigInteger.pow() and then BigInteger.doubleValue().
> > > >
> > > > On Java:
> > > >
> > > >  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
> > > >  ā  15-0.0
> > >
> > > >  ā  23-1.6777216E7
> > >
> > > >  ā  29-0.0
> > > >  ā  30-0.0
> > > >
> > > > On Adroid:
> > > >
> > > >  ā  ?- between(15,30,N), X is 10**N-10^N, write(N-X), nl, fail; true.
> > > >  ā  15-0.0
> > >
> > > >  ā  23-0.0
> > >
> > > >  ā  29-1.7592186044416E13
> > > >  ā  30-0.0
> > > >
> > > > Has Android different floats?
> > > > Tested jdk1.8.0_152 against Android 8.0.0
> > >
> > > ARM supposedly use standard IEEE 754 FP.
> > >
> > > But I wonder if usage of strictfp would change your results.
> > >
> > > Arne

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)

[toc] | [prev] | [next] | [standalone]


#38428

From"Eric Sosman" <eric.sosman@1:261/38.remove-i5b-this>
Date2018-06-24 17:28 -0500
Message-ID<5B329ADB.1167.ucljprogr@castlerockbbs.com>
In reply to#38426
  To: bursejan
From: "Eric Sosman" <eric.sosman@1:261/38.remove-101j-this>

  To: bursejan
From: Eric Sosman <esosman@comcast-dot-net.invalid>

On 6/24/2018 4:35 PM, bursejan@gmail.com wrote:
> The test code would be:
>
>          for (int i=22; i<25; i++) {
>             System.out.println("Math.pow(10,"+i+")="+Math.pow(10,i));
>          }
>
> The result (without strictfp modifier to main()) is:
>
>     Math.pow(10,22)=1.0E22
>     Math.pow(10,23)=1.0000000000000001E23
>     Math.pow(10,24)=1.0E24
>
> The result (with strictfp modifier to main()) is:
>
>     Math.pow(10,22)=1.0E22
>     Math.pow(10,23)=1.0000000000000001E23
>     Math.pow(10,24)=1.0E24
>
> Because invoking Math.pow() is not a basic operator +, *, /, etc..

     Have you tried using StrictMath.pow() instead of Math.pow()?
It is certainly possible that the Math implementations are different on
different platforms -- at least, the Javadoc seems to allow such freedom:

        "[...] Code generators are encouraged to use platform-specific
        native libraries or microprocessor instructions, where
        available, to provide higher-performance implementations of Math
        methods. [...]"

It's my understanding, though, that StrictMath implementations on all platforms
 are supposed to agree exactly.

--
esosman@comcast-dot-net.invalid
Nine hundred forty-one days to go.

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)

[toc] | [prev] | [next] | [standalone]


#38429

From"bursejan" <bursejan@1:261/38.remove-i5b-this>
Date2018-06-24 16:08 -0500
Message-ID<5B329ADB.1168.ucljprogr@castlerockbbs.com>
In reply to#38428
  To: Eric Sosman
From: "bursejan" <bursejan@1:261/38.remove-101j-this>

  To: Eric Sosman
From: bursejan@gmail.com

Yes, this seems to be the explanation, on the windows platform, Math.pow()
seems to get replaced by something else than StrictMath.pow().

With StrictMath.pow() (JDK 1.8, Windows):

   Math.pow(10,22)=1.0E22
   Math.pow(10,23)=9.999999999999999E22
   Math.pow(10,24)=1.0E24

With Math.pow() (JDK 1.8, Windows):

   Math.pow(10,22)=1.0E22
   Math.pow(10,23)=1.0000000000000001E23
   Math.pow(10,24)=1.0E24

What is Math.pow() doing on Windows, some Wintel nonsense?

Am Sonntag, 24. Juni 2018 23:29:11 UTC+2 schrieb Eric Sosman:
> On 6/24/2018 4:35 PM, bursejan@gmail.com wrote:
> > The test code would be:
> >
> >          for (int i=22; i<25; i++) {
> >             System.out.println("Math.pow(10,"+i+")="+Math.pow(10,i));
> >          }
> >
> > The result (without strictfp modifier to main()) is:
> >
> >     Math.pow(10,22)=1.0E22
> >     Math.pow(10,23)=1.0000000000000001E23
> >     Math.pow(10,24)=1.0E24
> >
> > The result (with strictfp modifier to main()) is:
> >
> >     Math.pow(10,22)=1.0E22
> >     Math.pow(10,23)=1.0000000000000001E23
> >     Math.pow(10,24)=1.0E24
> >
> > Because invoking Math.pow() is not a basic operator +, *, /, etc..
>
>      Have you tried using StrictMath.pow() instead of Math.pow()?
> It is certainly possible that the Math implementations are different
> on different platforms -- at least, the Javadoc seems to allow such
> freedom:
>
>       "[...] Code generators are encouraged to use platform-specific
>       native libraries or microprocessor instructions, where
>       available, to provide higher-performance implementations of Math
>       methods. [...]"
>
> It's my understanding, though, that StrictMath implementations on all
> platforms are supposed to agree exactly.
>
> --
> esosman@comcast-dot-net.invalid
> Nine hundred forty-one days to go.

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web