[Cosmo-torun] copying algorithms: GNU Scientific Library vs Numerical Recipes

Michal Frackowiak michalf w ncac.torun.pl
Pon, 15 Lis 2004, 17:27:13 CET


Oh, I have just read this email. This is somehow terrifying.
So the answer should be "don't care" I suppose. In this case the authors 
of GSL are the one to blame and not the user of GSL.

I agree the copyright of algorithms' code is tricky. I wonder if anyone 
understands it....

I think GSL violates the NR license. But it is their problem.

eeee..... perhaps we should just use it? ;-)

m.

Boud Roukema wrote:
> Witam,
>   What can be legally (and morally) copied from a program
> under a restrictive copyright is "the algorithms, the ideas" but not
> the particular way of expressing them.
> 
> So the practical question is: where is the borderline?
> 
> In the GSL (GNU Scientific Library), http://www.gnu.org/software/gsl/,
> GNU provides, e.g. in Version 1.1.1, the version below of NR's
> ran0 routine.
> 
> i'm sure most of us have access to a legal copy of the NR routine,
> or else a little googling shows e.g.
> 
> http://cc.oulu.fi/~tf/tiedostot/pub/nrf/ran0.f
> 
> Well, to me these look extremely similar to one another. Even the
> constants:
> 
> static const long int m = 2147483647, a = 16807, q = 127773, r = 2836;
> static const unsigned long int mask = 123459876;
> 
> are exactly identical to those in the NR routines, they even have the
> same names, except for the "i".  Is this really a different "expression"?
> 
> 
> In any case, IMHO noone can deny that the authors of the GSL routines
> (there is also ran1, ran2, ran3) have very likely had access to the NR
> source code.
> 
> Sure, they translated it to C and added some stuff, but it's the
> same algorithm, it's essentially the same sequence of steps.
> 
> 
> Anyway, GSL has lots of really cool stuff. :)   Let's defend scientific
> software freedom!
> 
> 
> pozdr
> boud
> 
> 
> ----------------------------------------------------------------------
> 
> /* rng/ran0.c
>  *
>  * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough
>  *
>  * This program is free software; you can redistribute it and/or modify
>  * it under the terms of the GNU General Public License as published by
>  * the Free Software Foundation; either version 2 of the License, or (at
>  * your option) any later version.
>  *
>  * This program is distributed in the hope that it will be useful, but
>  * WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>  * General Public License for more details.
>  *
>  * You should have received a copy of the GNU General Public License
>  * along with this program; if not, write to the Free Software
>  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
>  */
> 
> #include <config.h>
> #include <stdlib.h>
> #include <gsl/gsl_errno.h>
> #include <gsl/gsl_rng.h>
> 
> /* This is an implementation of the algorithm used in Numerical
>    Recipe's ran0 generator. It is the same as MINSTD with an XOR mask
>    of 123459876 on the seed.
> 
>    The period of this generator is 2^31.
> 
>    Note, if you choose a seed of 123459876 it would give a degenerate
>    series 0,0,0,0, ...  I've made that into an error. */
> 
> static inline unsigned long int ran0_get (void *vstate);
> static double ran0_get_double (void *vstate);
> static void ran0_set (void *state, unsigned long int s);
> 
> static const long int m = 2147483647, a = 16807, q = 127773, r = 2836;
> static const unsigned long int mask = 123459876;
> 
> typedef struct
>   {
>     unsigned long int x;
>   }
> ran0_state_t;
> 
> static inline unsigned long int
> ran0_get (void *vstate)
> {
>   ran0_state_t *state = (ran0_state_t *) vstate;
> 
>   const unsigned long int x = state->x;
> 
>   const long int h = x / q;
>   const long int t = a * (x - h * q) - h * r;
> 
>   if (t < 0)
>     {
>       state->x = t + m;
>     }
>   else
>     {
>       state->x = t;
>     }
> 
>   return state->x;
> }
> 
> static double
> ran0_get_double (void *vstate)
> {
>   return ran0_get (vstate) / 2147483647.0 ;
> }
> 
> static void
> ran0_set (void *vstate, unsigned long int s)
> {
>   ran0_state_t *state = (ran0_state_t *) vstate;
> 
>   if (s == mask)
>     {
>       GSL_ERROR_VOID ("ran0 should not use seed == mask",
> 				GSL_EINVAL);
>     }
> 
>   state->x = s ^ mask;
> 
>   return;
> }
> 
> static const gsl_rng_type ran0_type =
> {"ran0",			/* name */
>  2147483646,			/* RAND_MAX */
>  1,				/* RAND_MIN */
>  sizeof (ran0_state_t),
>  &ran0_set,
>  &ran0_get,
>  &ran0_get_double};
> 
> const gsl_rng_type *gsl_rng_ran0 = &ran0_type;
> 
> 
> ----------------------------------------------------------------------
> 
> _______________________________________________
> Cosmo-torun mailing list
> Cosmo-torun w cosmo.torun.pl
> http://cosmo.torun.pl/mailman/listinfo/cosmo-torun

-- 
--------------------------------------------------------
Michal Frackowiak
mail: michalf w ncac.torun.pl
www: http://www.ncac.torun.pl/~michalf
jabber im: michal_frackowiak w jabber.pl
phone: +48 (56) 6219319 int. 22, fax: +48 (56) 6219381
--------------------------------------------------------
Nicolaus Copernicus Astronomical Center
Department of Astrophysics in Torun (CAMK Torun)
ul. Rabianska 8, 87-100 Torun, Poland
http://www.ncac.torun.pl, http://www.camk.edu.pl
--------------------------------------------------------
-------------- następna część ---------
Binarny załącznik wiadomości został usunięty...
Nazwa: michalf.vcf
Typ: text/x-vcard
Rozmiar: 267 bytes
Opis: nie znany
Adres: <http://cosmo.torun.pl/pipermail/cosmo-torun/attachments/20041115/3213092e/attachment.vcf>
-------------- następna część ---------
Binarny załącznik wiadomości został usunięty...
Nazwa: signature.asc
Typ: application/pgp-signature
Rozmiar: 256 bytes
Opis: OpenPGP digital signature
Adres: <http://cosmo.torun.pl/pipermail/cosmo-torun/attachments/20041115/3213092e/attachment.sig>


Więcej informacji o liście Cosmo-torun