Bug 235320

Summary: usr.bin/units: What does this error message really mean: units: memory overflow in unit reduction
Product: Base System Reporter: Mateusz Piotrowski <0mp>
Component: binAssignee: Mateusz Piotrowski <0mp>
Status: Closed Overcome By Events    
Severity: Affects Only Me    
Priority: ---    
Version: 11.2-RELEASE   
Hardware: Any   
OS: Any   

Description Mateusz Piotrowski freebsd_committer freebsd_triage 2019-01-30 13:41:59 UTC
I use the following one-liner to test:

> sh -c 'units "$(yes m | head -n "$1")" "$(yes cm | head -n "$1")"' sh $N

When N is at most 154 then units(1) handles the conversion as expected. For example, for N=154:

>         * 1e+308
>         / 1e-308

For N from 155 to 333 the output is as follows:

>         * inf
>         / 0

While for N from 334 to 500 the output seems a little bit broken. Here is the output of N=500:

> units: memory overflow in unit reduction
> conformability error
>         1 m^334
>         0 centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi m centi cm m^166

For N >= 501 the output is:

> units: memory overflow in unit reduction
> units: memory overflow in unit reduction
> units: memory overflow in unit reduction
> conformability error
>         1 m^500
>         1 centi cm^499

I'd like to document this behavior but I am not sure what really is expected to happen in those edge cases.
Comment 1 Mateusz Piotrowski freebsd_committer freebsd_triage 2021-01-16 21:38:55 UTC
This is currently documented in the manual page. Let's close this issue for now.
Comment 2 Mateusz Piotrowski freebsd_committer freebsd_triage 2021-01-16 21:40:44 UTC
This is currently documented in the manual page. Let's close this is