taskGNU Astronomy Utilities - Tasks: task #16114, Print warning where integer...


You are not allowed to post comments on this tracker with your current authentication level.

task #16114: Print warning where integer overflow happens

Submitter:  Pedram Ashofteh-Ardakani <pedram>
Submitted:  Tue 01 Feb 2022 10:31:18 AM UTC
Should Start On:  Tue 01 Feb 2022 12:00:00 AM UTC Should be Finished on:  Tue 01 Feb 2022 12:00:00 AM UTC
Category:  Arithmetic Priority:  5 - Normal
Item Group:  Enhancement Status:  None
Privacy:  Public Percent Complete:  0%
Assigned to:  None Open/Closed:  Open
Effort:  0.00

( Jump to the original submission )

Wed 01 Mar 2023 03:06:00 PM UTC, comment #7: 

Good to know Mohammad. I can take this one.

Siyang He <decaf>
Tue 21 Feb 2023 04:57:24 PM UTC, comment #6: 

Thanks for looking into this problem. In this case, it does indeed seem necessary to do manual checks on each operator! But having it active all the time will force a significant overhead; we should add a flag for this so it is only activated when the user wants.

Flags are passed to the Arithmetic library through bits in the 'flags' argument. You can see their definition macros in the macros starting with 'GAL_ARITHMETIC_FLAG_' of 'lib/gnuastro/arithmetic.h' (searching for their names in the Arithmetic library's source files will hopefully give you some demos of how to use them).

For the time being, you can just add this flag manually in the top-level 'gal_arithmetic' function (and not take too much time for bringing it from the command-line). Later, I can connect it to a command-line option easily ;-).

About the final problem with '-128'. The reason is that "blank" values for signed integers are defined to be the minimum value of that type. In floating points, "blank" values are "NaN" or "Not a Number". Similar to NaNs in a floating point type, in Gnuastro any operation on an integer blank value will return false or the blank value itself.

Mohammad Akhlaghi <makhlaghi>
Project Administrator
Tue 21 Feb 2023 03:55:33 AM UTC, comment #5: 

I took a look at this.

Initially I tried to check errno's value against ERANGE, but never found a match. From googling I get the sense that it's on the C function's part to set errno (as opposed to having the OS set it automatically).

If this is true then I'd have to write overflow checks for each operator.

...so I wrote an overflow checker for addition. Right now I am calling the checker from arithmetic_binary() within lib/arithmetic.c. Specifically, arithmetic_binary() calls the checker before calling arithmetic_plus(). If this is a good place to call the checker then I can go ahead and write checkers for other operators.

As an aside, while testing my checker I found the following :

>$ astarithmetic 4 -128 int8 +

I don't think I see this on the task list.

Siyang He <decaf>
Sun 29 Jan 2023 12:44:22 PM UTC, comment #4: 

This task is open for anyone who is interested.

Mohammad Akhlaghi <makhlaghi>
Project Administrator
Sun 22 May 2022 01:07:55 PM UTC, comment #3: 

Have you made any progress on this Tushar?

Mohammad Akhlaghi <makhlaghi>
Project Administrator
Fri 11 Mar 2022 10:20:37 AM UTC, comment #2: 

This is a good bug you chose Tashar! Its all yours ;-).

Mohammad Akhlaghi <makhlaghi>
Project Administrator
Fri 11 Mar 2022 08:05:32 AM UTC, comment #1: 

I went to this error and want to fix it . Could you please assign this task to me.
Thank you

Tushar Gupta <tushar_gupta>
Project Member
Tue 01 Feb 2022 10:31:18 AM UTC, original submission:  

As explained in bug #61969 , arithmetic reads inputs and uses the smallest numerical data type possible to compute more efficiently with the least amount of memory. However, the user might not be aware of the integer overflow that might happen when calculations result in values that need larger storage types. For example:

$ astarithmetic 254 2 +

This happens because 254 and 2 are both of type uint8 that can store a maximum value of 255, so instead of getting the expected result 256, we'd get 0 as the result of an integer overflow. One way to work around this for now is to use floating points in the inputs, for instance:

$ astarithmetic 254.0 2 +

Since this is happening silently, we need to at least print a warning to notify the user of the circumstances. So this task is defined here as Mohammad pointed out in bug #61969:

> C library's 'errno.h' has a special error code for such range overflows: 'ERANGE'. We should add a check for this error code within arithmetic and if it happens, a warning should be printed that an overflow has happened (to standard-error; so its even printed with '--quiet'!).

Pedram Ashofteh-Ardakani <pedram>
Project Member


(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

No files currently attached


Depends on the following items: None found

Items that depend on this one: None found


Carbon-Copy List
  • -email is unavailable- added by decaf (Posted a comment)
  • -email is unavailable- added by makhlaghi (Posted a comment)
  • -email is unavailable- added by tushar_gupta (Posted a comment)
  • -email is unavailable- added by pedram (Submitted the item)
  • -email is unavailable- added by pedram

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.




    Follow 3 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2023-01-29 makhlaghi Assigned totushar_gupta None
    2022-03-11 makhlaghi Assigned toNone tushar_gupta
    2022-02-01 pedram Carbon-Copy- Added makhlaghi

    Back to the top

    Powered by Savane 3.11