home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.programming      Programming issues that transcend langua      57,431 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 56,766 of 57,431   
   Dmitry A. Kazakov to Richard Heathfield   
   Re: Another little puzzle   
   14 Dec 22 15:58:45   
   
   From: mailbox@dmitry-kazakov.de   
      
   On 2022-12-14 15:10, Richard Heathfield wrote:   
   > On 14/12/2022 1:35 pm, Dmitry A. Kazakov wrote:   
   >> On 2022-12-14 14:10, Richard Heathfield wrote:   
   >>> On 14/12/2022 1:06 pm, Dmitry A. Kazakov wrote:   
   >>>> On 2022-12-14 13:24, Stefan Ram wrote:   
   >>>>>    Given n times of the 24-hour day, print their average.   
   >>>>>   
   >>>>>    For example, the average of "eight o'clock" and   
   >>>>>    "ten o'clock" (n=2) would be "nine o'clock".   
   >>>>   
   >>>> You probably missed to require the interesting part: doing all that   
   >>>> in the modular type (modulo 24) arithmetic:   
   >>>>   
   >>>>     20 + 5 = 1 (mod 24)   
   >>>   
   >>> ...which will give you the wrong answer. Chase that goose!   
   >>   
   >> Right, you must count the wrap-ups.   
      
   [...]   
      
   > So why do you need mod?   
      
   As I said, the challenge is only interesting in modulo arithmetic (24 or   
   24*60 or 24*60*60). E.g. let   
      
       type Hour is mod 24;   
      
   Average a series of Hour without conversion to another integer type.   
      
   (Otherwise it is trivial: convert to a wider type, average, convert back)   
      
   P.S. This problem may actually arise in programming a microcontroller   
   when you have some large series and narrow 16-bit types. Close cases are   
   computations with color channels and grayscale levels when conversions   
   to wider types are too expensive etc.   
      
   The general case is some f(X1,X2,..,Xn) such that max{Xi} >= f() >=   
   min{Xi}, but intermediates are not. As it is in the case with averaging Xi.   
      
   BTW, averaging floats is a nasty problem too. A naive implementation   
   quickly loses precision.   
      
   --   
   Regards,   
   Dmitry A. Kazakov   
   http://www.dmitry-kazakov.de   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca