diff mbox series

[resend,v1,1/3] units: Add SI metric prefix definitions

Message ID 20210603160433.35816-1-andriy.shevchenko@linux.intel.com
State Superseded
Headers show
Series [resend,v1,1/3] units: Add SI metric prefix definitions | expand

Commit Message

Andy Shevchenko June 3, 2021, 4:04 p.m. UTC
Sometimes it's useful to have well-defined SI metric prefix to be used
to self-describe the formulas or equations.

List most popular ones in the units.h.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/units.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Jarkko Nikula June 7, 2021, 12:33 p.m. UTC | #1
On 6/3/21 7:04 PM, Andy Shevchenko wrote:
> Sometimes it's useful to have well-defined SI metric prefix to be used

> to self-describe the formulas or equations.

> 

> List most popular ones in the units.h.

> 

> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> ---

>   include/linux/units.h | 16 ++++++++++++++++

>   1 file changed, 16 insertions(+)

> 

> diff --git a/include/linux/units.h b/include/linux/units.h

> index dcc30a53fa93..7366fcd45ec2 100644

> --- a/include/linux/units.h

> +++ b/include/linux/units.h

> @@ -4,6 +4,22 @@

>   

>   #include <linux/math.h>

>   

> +/* Metric prefixes in accordance with Système international (d'unités) */

> +#define PETA	1000000000000000LL

> +#define TERA	1000000000000LL

> +#define GIGA	1000000000L

> +#define MEGA	1000000L

> +#define KILO	1000L

> +#define HECTO	100L

> +#define DECA	10L

> +#define DECI	10L

> +#define CENTI	100L

> +#define MILLI	1000L

> +#define MICRO	1000000L

> +#define NANO	1000000000L

> +#define PICO	1000000000000LL

> +#define FEMTO	1000000000000000LL

> +


For me milli is always 1/1000. Might lead to confusion with these 
defines if idea is to multiply with KILO but divide with MILLI?

Jarkko
Andy Shevchenko June 7, 2021, 2:24 p.m. UTC | #2
On Mon, Jun 07, 2021 at 03:33:31PM +0300, Jarkko Nikula wrote:
> On 6/3/21 7:04 PM, Andy Shevchenko wrote:

> > Sometimes it's useful to have well-defined SI metric prefix to be used

> > to self-describe the formulas or equations.

> > 

> > List most popular ones in the units.h.


...

> > +/* Metric prefixes in accordance with Système international (d'unités) */

> > +#define PETA	1000000000000000LL

> > +#define TERA	1000000000000LL

> > +#define GIGA	1000000000L

> > +#define MEGA	1000000L

> > +#define KILO	1000L

> > +#define HECTO	100L

> > +#define DECA	10L

> > +#define DECI	10L

> > +#define CENTI	100L

> > +#define MILLI	1000L

> > +#define MICRO	1000000L

> > +#define NANO	1000000000L

> > +#define PICO	1000000000000LL

> > +#define FEMTO	1000000000000000LL

> 

> For me milli is always 1/1000.


For me as well. Kernel does not operate with float point numbers.
That's why it's ordered like this.

> Might lead to confusion with these defines if

> idea is to multiply with KILO but divide with MILLI?


If the author of the hypothetical driver doesn't understand this, maybe
they can ask first, but I am an optimist here and I assume that whoever
writes the driver for a sensor / etc has a minimum education to see
what's needed for the certain case.

-- 
With Best Regards,
Andy Shevchenko
Andy Shevchenko June 7, 2021, 2:35 p.m. UTC | #3
On Mon, Jun 07, 2021 at 05:24:44PM +0300, Andy Shevchenko wrote:
> On Mon, Jun 07, 2021 at 03:33:31PM +0300, Jarkko Nikula wrote:

> > On 6/3/21 7:04 PM, Andy Shevchenko wrote:

> > > Sometimes it's useful to have well-defined SI metric prefix to be used

> > > to self-describe the formulas or equations.

> > > 

> > > List most popular ones in the units.h.

> 

> ...

> 

> > > +/* Metric prefixes in accordance with Système international (d'unités) */

> > > +#define PETA	1000000000000000LL

> > > +#define TERA	1000000000000LL

> > > +#define GIGA	1000000000L

> > > +#define MEGA	1000000L

> > > +#define KILO	1000L

> > > +#define HECTO	100L

> > > +#define DECA	10L

> > > +#define DECI	10L

> > > +#define CENTI	100L

> > > +#define MILLI	1000L

> > > +#define MICRO	1000000L

> > > +#define NANO	1000000000L

> > > +#define PICO	1000000000000LL

> > > +#define FEMTO	1000000000000000LL

> > 

> > For me milli is always 1/1000.

> 

> For me as well. Kernel does not operate with float point numbers.

> That's why it's ordered like this.

> 

> > Might lead to confusion with these defines if

> > idea is to multiply with KILO but divide with MILLI?

> 

> If the author of the hypothetical driver doesn't understand this, maybe

> they can ask first, but I am an optimist here and I assume that whoever

> writes the driver for a sensor / etc has a minimum education to see

> what's needed for the certain case.


Writing this, I think that I'm not so educated :-)

What we have in I²C case is kHz * ns = 10^3 * 10^-9, so we need to divide by
10^-6 to normalize the numbers. Sounds like MICRO is the correct thing to use
there.

-- 
With Best Regards,
Andy Shevchenko
diff mbox series

Patch

diff --git a/include/linux/units.h b/include/linux/units.h
index dcc30a53fa93..7366fcd45ec2 100644
--- a/include/linux/units.h
+++ b/include/linux/units.h
@@ -4,6 +4,22 @@ 
 
 #include <linux/math.h>
 
+/* Metric prefixes in accordance with Système international (d'unités) */
+#define PETA	1000000000000000LL
+#define TERA	1000000000000LL
+#define GIGA	1000000000L
+#define MEGA	1000000L
+#define KILO	1000L
+#define HECTO	100L
+#define DECA	10L
+#define DECI	10L
+#define CENTI	100L
+#define MILLI	1000L
+#define MICRO	1000000L
+#define NANO	1000000000L
+#define PICO	1000000000000LL
+#define FEMTO	1000000000000000LL
+
 #define MILLIWATT_PER_WATT	1000L
 #define MICROWATT_PER_MILLIWATT	1000L
 #define MICROWATT_PER_WATT	1000000L