Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Robert Klemme Newsgroups: comp.lang.java.programmer Subject: Re: Using Enumerated Types as Array Indexes Date: Sat, 20 Aug 2011 11:21:14 +0200 Lines: 45 Message-ID: <9b9ckfF7uhU1@mid.individual.net> References: <4e4b0d81$0$314$14726298@news.sunsite.dk> <4e4b1fe4$0$314$14726298@news.sunsite.dk> <6d418cda-dab3-43df-a9ec-293b43f2bbd8@glegroupsg2000goo.googlegroups.com> <9b2aglFuj7U1@mid.individual.net> <9b72b5FrgfU1@mid.individual.net> <9b85ssF8vsU1@mid.individual.net> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net 6wDFXHj8sAsDRQRBX4fozAMzl+7pmXcMWGoesCNKsX4sL5FMc= Cancel-Lock: sha1:M1DzUs4+4cF0oEBFlCOGgKurlQM= User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Lightning/1.0b2 Thunderbird/3.1.11 In-Reply-To: Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:7262 On 08/20/2011 01:11 AM, Andreas Leitgeb wrote: > Robert Klemme wrote: >> On 19.08.2011 22:05, Andreas Leitgeb wrote: >>> Robert Klemme wrote: >>>> All solutions to fix remainder into modulo but keep the wrap around >>>> which have been proposed so far share a common disadvantage: if the >>>> number range is not a multiple of the divisor the value distribution >>>> will not be uniform. >>>> >>>> The solution I used to fix this employed a do while loop and >>>> compareAndSet() to reset the value to the beginning of the range (0 in >>>> this case) in a thread safe manner. >>> >>> There's a much simpler "meta-way" to fix it: just stick to powers of >>> 2 for the array length - then the overflow *does* always happen at a >>> multiple of the divisor and the value distribution uniform :-) >> >> I reckon you do not mean that suggestion serious. Just in case: >> limiting to powers of 2 was not an option here. And if it was, I would >> not have used modulo or AtomicInteger's features but just used binary& >> to cut off leading bits. > > Of course I don't know the wider context, but to me it seemed as if > a power-of-2 sized array would be such a natural choice, that you'd That never occurred to me. Limiting to powers of 2 does have some advantages in some situation but it's certainly nothing I would consider "natural" generally. > surely use one, anyway, already. Under these circumstances, (n % N) > would have seemed to be the same as (n& (N-1)), yet shorter and > clearer - except, as then learned, for negative n ... > > May I ask, what other entity imposes the array length on you, and why > choosing the next larger power of 2 will not do? The value is user configurable and limiting to powers of 2 as valid values would reduce the range of possible values unnecessarily especially since the value is resource intensive - so the difference between 6 and 8 could be significant. That's also why silently adjusting was not an option. Kind regards robert