diff mbox series

[FFmpeg-devel,1/2] libavutil/eval: introduce UINT64_MAX constant

Message ID 20240101193859.1038078-1-stefasab@gmail.com
State New
Headers show
Series [FFmpeg-devel,1/2] libavutil/eval: introduce UINT64_MAX constant | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Stefano Sabatini Jan. 1, 2024, 7:38 p.m. UTC
This might be useful, e.g. when setting the random seed expressed as a
uint64_t.
---
 doc/utils.texi   | 3 +++
 libavutil/eval.c | 1 +
 2 files changed, 4 insertions(+)

Comments

Michael Niedermayer Jan. 2, 2024, 12:10 a.m. UTC | #1
On Mon, Jan 01, 2024 at 08:38:58PM +0100, Stefano Sabatini wrote:
> This might be useful, e.g. when setting the random seed expressed as a
> uint64_t.
> ---
>  doc/utils.texi   | 3 +++
>  libavutil/eval.c | 1 +
>  2 files changed, 4 insertions(+)
> 
> diff --git a/doc/utils.texi b/doc/utils.texi
> index 0c4f146f4f..ac9b63826e 100644
> --- a/doc/utils.texi
> +++ b/doc/utils.texi
> @@ -1030,6 +1030,9 @@ area of the unit disc, approximately 3.14
>  exp(1) (Euler's number), approximately 2.718
>  @item PHI
>  golden ratio (1+sqrt(5))/2, approximately 1.618
> +@item UINT64_MAX
> +maximum value expressed as an unsigned integer, corresponds to

> +18446744073709551616 ((2^64)-1)

this doesnt look right
2^x is even
even -1 is odd
18446744073709551616 should be a odd number
18446744073709551615 looks more likely

double precission also doesnt like exactly ((2^64)-1) because the mantisse has too few bits

(U)INT64_MIN should work though exactly in double

thx

[...]
Stefano Sabatini Jan. 3, 2024, 4:17 p.m. UTC | #2
On date Tuesday 2024-01-02 01:10:28 +0100, Michael Niedermayer wrote:
> On Mon, Jan 01, 2024 at 08:38:58PM +0100, Stefano Sabatini wrote:
> > This might be useful, e.g. when setting the random seed expressed as a
> > uint64_t.
> > ---
> >  doc/utils.texi   | 3 +++
> >  libavutil/eval.c | 1 +
> >  2 files changed, 4 insertions(+)
> > 
> > diff --git a/doc/utils.texi b/doc/utils.texi
> > index 0c4f146f4f..ac9b63826e 100644
> > --- a/doc/utils.texi
> > +++ b/doc/utils.texi
> > @@ -1030,6 +1030,9 @@ area of the unit disc, approximately 3.14
> >  exp(1) (Euler's number), approximately 2.718
> >  @item PHI
> >  golden ratio (1+sqrt(5))/2, approximately 1.618
> > +@item UINT64_MAX
> > +maximum value expressed as an unsigned integer, corresponds to
> 
> > +18446744073709551616 ((2^64)-1)
> 
> this doesnt look right
> 2^x is even
> even -1 is odd
> 18446744073709551616 should be a odd number
> 18446744073709551615 looks more likely
> 
> double precission also doesnt like exactly ((2^64)-1) because the mantisse has too few bits
> 
> (U)INT64_MIN should work though exactly in double

Updated.
Michael Niedermayer Jan. 3, 2024, 7:40 p.m. UTC | #3
On Wed, Jan 03, 2024 at 05:17:07PM +0100, Stefano Sabatini wrote:
> On date Tuesday 2024-01-02 01:10:28 +0100, Michael Niedermayer wrote:
> > On Mon, Jan 01, 2024 at 08:38:58PM +0100, Stefano Sabatini wrote:
> > > This might be useful, e.g. when setting the random seed expressed as a
> > > uint64_t.
> > > ---
> > >  doc/utils.texi   | 3 +++
> > >  libavutil/eval.c | 1 +
> > >  2 files changed, 4 insertions(+)
> > > 
> > > diff --git a/doc/utils.texi b/doc/utils.texi
> > > index 0c4f146f4f..ac9b63826e 100644
> > > --- a/doc/utils.texi
> > > +++ b/doc/utils.texi
> > > @@ -1030,6 +1030,9 @@ area of the unit disc, approximately 3.14
> > >  exp(1) (Euler's number), approximately 2.718
> > >  @item PHI
> > >  golden ratio (1+sqrt(5))/2, approximately 1.618
> > > +@item UINT64_MAX
> > > +maximum value expressed as an unsigned integer, corresponds to
> > 
> > > +18446744073709551616 ((2^64)-1)
> > 
> > this doesnt look right
> > 2^x is even
> > even -1 is odd
> > 18446744073709551616 should be a odd number
> > 18446744073709551615 looks more likely
> > 
> > double precission also doesnt like exactly ((2^64)-1) because the mantisse has too few bits
> > 
> > (U)INT64_MIN should work though exactly in double
> 
> Updated.

>  doc/utils.texi   |    3 +++
>  libavutil/eval.c |    1 +
>  2 files changed, 4 insertions(+)
> 97bdb4309465dc8ad995abb2740d3f3063251398  0001-libavutil-eval-introduce-UINT64_MAX-constant.patch
> From f2772a82779b16982e3bc74176c6ff1011156096 Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefasab@gmail.com>
> Date: Mon, 1 Jan 2024 20:32:38 +0100
> Subject: [PATCH 1/2] libavutil/eval: introduce UINT64_MAX constant
> 
> This might be useful, e.g. when setting the random seed expressed as a
> uint64_t value.
> ---
>  doc/utils.texi   | 3 +++
>  libavutil/eval.c | 1 +
>  2 files changed, 4 insertions(+)
> 
> diff --git a/doc/utils.texi b/doc/utils.texi
> index 0c4f146f4f..dec009a015 100644
> --- a/doc/utils.texi
> +++ b/doc/utils.texi
> @@ -1030,6 +1030,9 @@ area of the unit disc, approximately 3.14
>  exp(1) (Euler's number), approximately 2.718
>  @item PHI
>  golden ratio (1+sqrt(5))/2, approximately 1.618
> +@item UINT64_MAX
> +maximum value expressed as an unsigned 64-bits integer, corresponds to
> +18446744073709551615 ((2^64)-1)
>  @end table

This has unexpected issues

because its in double based table
18446744073709551615 cant be stored in a double so it will become 18446744073709551616
the difference is very small but the value is not the maximum representable but
rather the smallest non representable integer and also the smallest non representable double

so really its
2^64
POW2_64

given that, POW2_64 seems the more precisse name. And how much faster is that
than 2^64 ?

thx

[...]
diff mbox series

Patch

diff --git a/doc/utils.texi b/doc/utils.texi
index 0c4f146f4f..ac9b63826e 100644
--- a/doc/utils.texi
+++ b/doc/utils.texi
@@ -1030,6 +1030,9 @@  area of the unit disc, approximately 3.14
 exp(1) (Euler's number), approximately 2.718
 @item PHI
 golden ratio (1+sqrt(5))/2, approximately 1.618
+@item UINT64_MAX
+maximum value expressed as an unsigned integer, corresponds to
+18446744073709551616 ((2^64)-1)
 @end table
 
 Assuming that an expression is considered "true" if it has a non-zero
diff --git a/libavutil/eval.c b/libavutil/eval.c
index dc6b3697bc..93048bff91 100644
--- a/libavutil/eval.c
+++ b/libavutil/eval.c
@@ -100,6 +100,7 @@  static const struct {
     { "PI",  M_PI  },
     { "PHI", M_PHI },
     { "QP2LAMBDA", FF_QP2LAMBDA },
+    { "UINT64_MAX", UINT64_MAX }
 };
 
 double av_strtod(const char *numstr, char **tail)