From: Mike Hall Date: 2002-04-06T04:54:50+09:00 Subject: Additions to math.c (more math functions) This is a multi-part message in MIME format. --------------CDF71DB0C6FA8AAAA6707151 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Since 1.7 added the hyperbolic trig functions, I figured it should have their 'arc' functions, too. While I was at it, I added the Bessel funcs, and 'lgamma', and added a few constants. A patch file is attached, as is a little test script. -- Mike Hall http://www.enteract.com/~mghall --------------CDF71DB0C6FA8AAAA6707151 Content-Type: application/x-patch; name="math.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="math.patch" KioqIG1hdGguYy5vcmlnCU1vbiBNYXIgMTIgMjM6NDU6MDkgMjAwMQotLS0gbWF0aC5jCVRo dSBBcHIgIDQgMjM6MTU6NTcgMjAwMgoqKioqKioqKioqKioqKioKKioqIDExMywxMTggKioq KgotLS0gMTEzLDIyOCAtLS0tCiAgfQogIAogIHN0YXRpYyBWQUxVRQorIG1hdGhfYWNvc2go b2JqLCB4KQorICAgICBWQUxVRSBvYmosIHg7CisgeworICAgICBOZWVkX0Zsb2F0KHgpOwor ICAgICByZXR1cm4gcmJfZmxvYXRfbmV3KGFjb3NoKFJGTE9BVCh4KS0+dmFsdWUpKTsKKyB9 CisgCisgc3RhdGljIFZBTFVFCisgbWF0aF9hc2luaChvYmosIHgpCisgICAgIFZBTFVFIG9i aiwgeDsKKyB7CisgICAgIE5lZWRfRmxvYXQoeCk7CisgICAgIHJldHVybiByYl9mbG9hdF9u ZXcoYXNpbmgoUkZMT0FUKHgpLT52YWx1ZSkpOworIH0KKyAKKyBzdGF0aWMgVkFMVUUKKyBt YXRoX2F0YW5oKG9iaiwgeCkKKyAgICAgVkFMVUUgb2JqLCB4OworIHsKKyAgICAgTmVlZF9G bG9hdCh4KTsKKyAgICAgcmV0dXJuIHJiX2Zsb2F0X25ldyhhdGFuaChSRkxPQVQoeCktPnZh bHVlKSk7CisgfQorIAorIHN0YXRpYyBWQUxVRQorIG1hdGhfajAob2JqLCB4KQorICAgICBW QUxVRSBvYmosIHg7CisgeworICAgICBOZWVkX0Zsb2F0KHgpOworICAgICByZXR1cm4gcmJf ZmxvYXRfbmV3KGowKFJGTE9BVCh4KS0+dmFsdWUpKTsKKyB9CisgCisgc3RhdGljIFZBTFVF CisgbWF0aF9qMShvYmosIHgpCisgICAgIFZBTFVFIG9iaiwgeDsKKyB7CisgICAgIE5lZWRf RmxvYXQoeCk7CisgICAgIHJldHVybiByYl9mbG9hdF9uZXcoajEoUkZMT0FUKHgpLT52YWx1 ZSkpOworIH0KKyAKKyBzdGF0aWMgVkFMVUUKKyBtYXRoX2puKG9iaiwgbiwgeCkKKyAgICAg VkFMVUUgb2JqLCBuLCB4OworIHsKKyAgICAgTmVlZF9GbG9hdCh4KTsKKyAgICAgcmJfSW50 ZWdlcihuKTsKKyAgICAgcmV0dXJuIHJiX2Zsb2F0X25ldyhqbihGSVgyTE9ORyhuKSwgUkZM T0FUKHgpLT52YWx1ZSkpOworIH0KKyAKKyBzdGF0aWMgVkFMVUUKKyBtYXRoX3kwKG9iaiwg eCkKKyAgICAgVkFMVUUgb2JqLCB4OworIHsKKyAgICAgTmVlZF9GbG9hdCh4KTsKKyAgICAg cmV0dXJuIHJiX2Zsb2F0X25ldyh5MChSRkxPQVQoeCktPnZhbHVlKSk7CisgfQorIAorIHN0 YXRpYyBWQUxVRQorIG1hdGhfeTEob2JqLCB4KQorICAgICBWQUxVRSBvYmosIHg7Cisgewor ICAgICBOZWVkX0Zsb2F0KHgpOworICAgICByZXR1cm4gcmJfZmxvYXRfbmV3KHkxKFJGTE9B VCh4KS0+dmFsdWUpKTsKKyB9CisgCisgc3RhdGljIFZBTFVFCisgbWF0aF95bihvYmosIG4s IHgpCisgICAgIFZBTFVFIG9iaiwgbiwgeDsKKyB7CisgICAgIE5lZWRfRmxvYXQoeCk7Cisg ICAgIHJiX0ludGVnZXIobik7CisgICAgIHJldHVybiByYl9mbG9hdF9uZXcoeW4oRklYMkxP TkcobiksIFJGTE9BVCh4KS0+dmFsdWUpKTsKKyB9CisgCisgc3RhdGljIFZBTFVFCisgbWF0 aF9lcmYob2JqLCB4KQorICAgICBWQUxVRSBvYmosIHg7CisgeworICAgICBOZWVkX0Zsb2F0 KHgpOworICAgICByZXR1cm4gcmJfZmxvYXRfbmV3KGVyZihSRkxPQVQoeCktPnZhbHVlKSk7 CisgfQorIAorIHN0YXRpYyBWQUxVRQorIG1hdGhfZXJmYyhvYmosIHgpCisgICAgIFZBTFVF IG9iaiwgeDsKKyB7CisgICAgIE5lZWRfRmxvYXQoeCk7CisgICAgIHJldHVybiByYl9mbG9h dF9uZXcoZXJmYyhSRkxPQVQoeCktPnZhbHVlKSk7CisgfQorIAorIHN0YXRpYyBWQUxVRQor IG1hdGhfbGdhbW1hKG9iaiwgeCkKKyAgICAgVkFMVUUgb2JqLCB4OworIHsKKyAgICAgTmVl ZF9GbG9hdCh4KTsKKyAgICAgcmV0dXJuIHJiX2Zsb2F0X25ldyhsZ2FtbWEoUkZMT0FUKHgp LT52YWx1ZSkpOworIH0KKyAKKyBzdGF0aWMgVkFMVUUKKyBtYXRoX2dhbW1hKG9iaiwgeCkK KyAgICAgVkFMVUUgb2JqLCB4OworIHsKKyAgICAgZG91YmxlIGxnOworICAgICBOZWVkX0Zs b2F0KHgpOworIAorICAgICBsZyA9IGxnYW1tYShSRkxPQVQoeCktPnZhbHVlKTsKKyAgICAg LyogaWYgd2UgaGFkIGVycm9yIGNoZWNrcywgdGVzdCB0aGF0ICgnbGcnIDwgTE5fTUFYRE9V QkxFKSBmaXJzdCAqLworICAgICByZXR1cm4gcmJfZmxvYXRfbmV3KHNpZ25nYW0gKiBleHAo bGcpKTsKKyB9CisgCisgc3RhdGljIFZBTFVFCiAgbWF0aF9leHAob2JqLCB4KQogICAgICBW QUxVRSBvYmosIHg7CiAgewoqKioqKioqKioqKioqKioKKioqIDE5OSwyMDQgKioqKgotLS0g MzA5LDMzMCAtLS0tCiAgICAgIHJiX2RlZmluZV9jb25zdChyYl9tTWF0aCwgIkUiLCByYl9m bG9hdF9uZXcoZXhwKDEuMCkpKTsKICAjZW5kaWYKICAKKyAjaWZkZWYgTkFOCisgICAgIHJi X2RlZmluZV9jb25zdChyYl9tTWF0aCwgIk5BTiIsIHJiX2Zsb2F0X25ldyhOQU4pKTsKKyAj ZW5kaWYKKyAjaWZkZWYgSFVHRV9WQUwKKyAgICAgcmJfZGVmaW5lX2NvbnN0KHJiX21NYXRo LCAiSU5GSU5JVFkiLCByYl9mbG9hdF9uZXcoSFVHRV9WQUwpKTsKKyAjZW5kaWYKKyAjaWZk ZWYgREJMX01BWAorICAgICByYl9kZWZpbmVfY29uc3QocmJfbU1hdGgsICJNQVgiLCByYl9m bG9hdF9uZXcoREJMX01BWCkpOworICNlbmRpZgorICNpZmRlZiBEQkxfTUlOCisgICAgIHJi X2RlZmluZV9jb25zdChyYl9tTWF0aCwgIk1JTiIsIHJiX2Zsb2F0X25ldyhEQkxfTUlOKSk7 CisgI2VuZGlmCisgI2lmZGVmIERCTF9FUFNJTE9OCisgICAgIHJiX2RlZmluZV9jb25zdChy Yl9tTWF0aCwgIkVQU0lMT04iLCByYl9mbG9hdF9uZXcoREJMX0VQU0lMT04pKTsKKyAjZW5k aWYKKyAKICAgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlvbihyYl9tTWF0aCwgImF0YW4y IiwgbWF0aF9hdGFuMiwgMik7CiAgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJf bU1hdGgsICJjb3MiLCBtYXRoX2NvcywgMSk7CiAgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVu Y3Rpb24ocmJfbU1hdGgsICJzaW4iLCBtYXRoX3NpbiwgMSk7CioqKioqKioqKioqKioqKgoq KiogMjEyLDIxNyAqKioqCi0tLSAzMzgsMzYwIC0tLS0KICAgICAgcmJfZGVmaW5lX21vZHVs ZV9mdW5jdGlvbihyYl9tTWF0aCwgInNpbmgiLCBtYXRoX3NpbmgsIDEpOwogICAgICByYl9k ZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21NYXRoLCAidGFuaCIsIG1hdGhfdGFuaCwgMSk7 CiAgCisgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgsICJhY29zaCIs IG1hdGhfYWNvc2gsIDEpOworICAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21N YXRoLCAiYXNpbmgiLCBtYXRoX2FzaW5oLCAxKTsKKyAgICAgcmJfZGVmaW5lX21vZHVsZV9m dW5jdGlvbihyYl9tTWF0aCwgImF0YW5oIiwgbWF0aF9hdGFuaCwgMSk7CisgCisgICAgIHJi X2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgsICJqMCIsIG1hdGhfajAsIDEpOwor ICAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21NYXRoLCAiajEiLCBtYXRoX2ox LCAxKTsKKyAgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlvbihyYl9tTWF0aCwgImpuIiwg bWF0aF9qbiwgMik7CisgCisgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1h dGgsICJ5MCIsIG1hdGhfeTAsIDEpOworICAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9u KHJiX21NYXRoLCAieTEiLCBtYXRoX3kxLCAxKTsKKyAgICAgcmJfZGVmaW5lX21vZHVsZV9m dW5jdGlvbihyYl9tTWF0aCwgInluIiwgbWF0aF95biwgMik7CisgCisgICAgIHJiX2RlZmlu ZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgsICJlcmYiLCAgICBtYXRoX2VyZiwgICAgMSk7 CisgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgsICJlcmZjIiwgICBt YXRoX2VyZmMsICAgMSk7CisgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1h dGgsICJsZ2FtbWEiLCBtYXRoX2xnYW1tYSwgMSk7CisgICAgIHJiX2RlZmluZV9tb2R1bGVf ZnVuY3Rpb24ocmJfbU1hdGgsICJnYW1tYSIsICBtYXRoX2dhbW1hLCAgMSk7CisgCiAgICAg IHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgsICJleHAiLCBtYXRoX2V4cCwg MSk7CiAgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgsICJsb2ciLCBt YXRoX2xvZywgMSk7CiAgICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU1hdGgs ICJsb2cxMCIsIG1hdGhfbG9nMTAsIDEpOwo= --------------CDF71DB0C6FA8AAAA6707151 Content-Type: text/plain; charset=us-ascii; name="mtest" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="mtest" # Test added math functions include Math puts "Ruby: #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]" # Ruby: 1.7.2 (2002-03-27) [i686-linux] def show(cmd, x, a='', b='') print cmd, "\t", x, "\t", a, "\t", b, "\n" end x=1.2345 puts "Test functions" show "cos", x, b=cos(x), acos(b) show "sin", x, b=sin(x), asin(b) show "tan", x, b=tan(x), atan(b) show "cosh", x, b=cosh(x), acosh(b) show "sinh", x, b=sinh(x), asinh(b) show "tanh", x, b=tanh(x), atanh(b) show "y0, y1", x, y0(x), y1(x) show "j0, j1", x, j0(x), j1(x) show "yn 2,3", x, yn(2,x), yn(3,x) show "jn 2,3", x, jn(2,x), jn(3,x) show "lgm", x=7.0, lgamma(x), exp(lgamma(x)) show "gma", x=7.0, '', gamma(x) show "erf", x=0.25, erf(x), erf(x+0.25) show "erfc", x, erfc(x), erfc(x+0.25) puts "Constants" Math::constants.sort.each {|c| print c, "\t", eval(c), "\n" } --------------CDF71DB0C6FA8AAAA6707151--