کتاب‌خانه علوم گنو

کتاب‌خانه علمی گنو (یا GSL) یک کتاب‌خانه نرم‌افزاری برای محاسبات عددی در ریاضیات کاربردی و علوم است. GSL به زبان سی نوشته شده‌است؛ همچنین wrapperهای آن برای زبان‌های برنامه‌نویسی دیگر دردسترس هستند. GSL بخشی از پروژه گنو است و تحت پروانه عمومی همگانی گنو منتشر شده‌است.

پیشینه پروژه 
پروژه GSL در ۱۹۹۶ توسط فیزیک‌دانان Mark Galassi و James Theiler از آزمایشگاه ملی آلاموس پایه‌گذاری شد. آنان هدف نوشتن یک جایگزین پیشرفته برای کتاب‌خانه‌های مورد استفاده گسترده، اما به‌روزنشده فورترن همچون Netlib داشتند. آنان تمام طراحی کلی را انجام دادند و ماژول‌های اولیه را نوشتند؛ و هنگام آمادگی آن‌ها دانشمندان دیگری را برای همکاری استخدام کردند.

«توسعه کلی کتاب‌خانه و ساخت ماژول‌های بزرگتر» توسط Brian Gough و Gerard Jungman انجام شد. همکاران بزرگ دیگر Jim Davies, Reid Priedhorsky, M. Booth و F. Rossi بودند.

نسخه ۱٫۰ در ۲۰۱۱ منتشر شد. و کتابخانه به صورت فعال به توسعه ادامه داد و نسخه ۱٫۱۶ آن در ۱۹ ژوئیه ۲۰۱۳ منتشر شد.

نمونه 
برنامه نمونه زیر مقدار تابع بسل را برای ۵ محاسبه می‌کند.
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int main(void)
{
  double x = 5.0;
  double y = gsl_sf_bessel_J0(x);
  printf("J0(%g) = %.18e\n", x, y);
  return 0;
}
این برنامه نمونه در حال پیوند دادن به کتاب‌خانه GSL هنگام کامپایل است.
gcc $(gsl-config --cflags) example.c $(gsl-config --libs)
خروجی در زیر نمایش داده‌شده و می‌تواند با دقت مضاعف صحیح باشد.
J0(5) = -1.775967713143382920e-01

ویژگی‌ها 
کتاب‌خانه نرم‌افزاری این قابلیت‌ها را ارائه می‌دهد
 توابع پایه ریاضیات
 اعداد مختلط
 چندجمله‌ای‌ها
 توابع مخصوص
 بردار و ماتریس
 جایگشت‌ها
 ترکیبات
 Multisets
 مرتب‌سازی
 BLAS
 جبر خطی
 Eigensystems
 تبدیل فوریه سریع
 یکپارچه‌سازی اعداد (بر پایه QUADPACK)
 ساخت عدد تصادفی
 توالی شبه‌تصادفی
 توزیع اعداد تصادفی
 آمار
 هیستوگرام
 تاپل N
 یکپارچه‌سازی مونت کارلو
 بازریخت شبیه‌سازی شده
 معادلات دیفرانسیل معمولی
 الحاق
 دیفرانسیل عددی
 تقریب چبیشف
 شتاب سری
 تبدیل گسسته هنکل
 ریشه‌یابی در یک و چند بعدی
 بهینه‌سازی در یک و چند بعدی
 حداقل مربعات fitting
 حداقل مربعات fitting غیرخطی
 ثابت‌های فیزیکی
 حساب ممیز شناور IEEE
 تبدیل موجک گسسته

اتصال زبان‌های برنامه‌نویسی 
از آنجایی که GSL به زبان سی نوشته شده، ارائه wrapper به زبان‌های برنامه‌نویسی دیگر آسان است. در زیر چنین wrapperهایی آمده‌اند:
 AMPL
 سی++
 فورترن
 هسکل
 لیسپ
 Ocami
 اوکتاو
 زبان داده پرل
 پایتون
 آر
 روبی

پشتیبانی سی++ 
GSL می‌تواند در کلاس‌های سی++ استفاده شود، اما بدون استفاده از اشاره‌گر به توابع عضو، چرا که اشاره‌گر به تابع عضو با اشاره‌گر به تابع متفاوت است. به‌جای آن، اشاره‌گر به توابع ایستا می‌تواند استفاده شود. استفاده مشابهی درباره آن استفاده از functor است. wrapperهای سی++ برای GSL هم دردسترس است، اگرچه به‌طورمرتب نگهداری نمی‌شوند.

منابع 

کتابخانه‌های رایانه‌ای آزاد
کتابخانه‌های سی
نرم‌افزارهای آزاد نوشته‌شده با سی
نرم‌افزارهای پروژه گنو
نرم‌افزارهای عددی