[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