From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.devel Subject: Re: Adding a generic mathematical library Date: Sun, 21 Jul 2024 14:20:05 +0200 Message-ID: <874j8j3pje.fsf@dataswamp.org> References: <8734o9sdig.fsf@posteo.net> <87wmllqq66.fsf@posteo.net> <87plrdqnhc.fsf@posteo.net> <87le21qldj.fsf_-_@posteo.net> <878qy1at52.fsf@dataswamp.org> <87ikwz5nll.fsf@dataswamp.org> <875xsz5g07.fsf@dataswamp.org> <87v80z3wkq.fsf@dataswamp.org> <87ed7n3sav.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="32481"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:5DXMQDrx5PrXFhTlo+00OyZgFS0= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Jul 21 14:27:04 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sVVea-0008FU-9Q for ged-emacs-devel@m.gmane-mx.org; Sun, 21 Jul 2024 14:27:04 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sVVe0-0000wL-Ls; Sun, 21 Jul 2024 08:26:29 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sVVY0-0008BA-6J for emacs-devel@gnu.org; Sun, 21 Jul 2024 08:20:16 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sVVXx-0005Ap-H5 for emacs-devel@gnu.org; Sun, 21 Jul 2024 08:20:15 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1sVVXv-0000sV-7N for emacs-devel@gnu.org; Sun, 21 Jul 2024 14:20:11 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sun, 21 Jul 2024 08:26:23 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:321873 Archived-At: Christopher Dimech wrote: > All depends on who wants to produce a first release that > handles two initial mathematical classifications, and which > helps others extend the library to other additional > topic classification. Here is arithmetic! What more do we want? :) Arithmetic: (+ &rest numbers) Return sum of any number of arguments, which are numbers or markers. (+ 1 2) => 3 (+ 1 2 3 4) => 10 ------------------------------------------------------------------------------- (- &rest numbers) Negate number or subtract numbers or markers and return the result. (- 3 2) => 1 (- 6 3 2) => 1 ------------------------------------------------------------------------------- (* &rest numbers) Return product of any number of arguments, which are numbers or markers. (* 3 4 5) => 60 ------------------------------------------------------------------------------- (/ number &rest divisors) Divide number by divisors and return the result. (/ 10 5) => 2 (/ 10 6) => 1 (/ 10.0 6) => 1.6666666666666667 (/ 10.0 3 3) => 1.1111111111111112 ------------------------------------------------------------------------------- (% x y) Return remainder of X divided by Y. (% 10 5) => 0 (% 10 6) => 4 ------------------------------------------------------------------------------- (mod x y) Return X modulo Y. (mod 10 5) => 0 (mod 10 6) => 4 (mod 10.5 6) => 4.5 ------------------------------------------------------------------------------- (1+ number) Return NUMBER plus one. NUMBER may be a number or a marker. (1+ 2) => 3 ------------------------------------------------------------------------------- (1- number) Return NUMBER minus one. NUMBER may be a number or a marker. (1- 4) => 3 Predicates (= number &rest numbers) Return t if args, all numbers or markers, are equal. (= 4 4) => t (= 4.0 4.0) => t (= 4 4.0) => t (= 4 4 4 4) => t ------------------------------------------------------------------------------- (eql obj1 obj2) Return t if the two args are ‘eq’ or are indistinguishable numbers. (eql 4 4) => t (eql 4.0 4.0) => t ------------------------------------------------------------------------------- (/= num1 num2) Return t if first arg is not equal to second arg. Both must be numbers or markers. (/= 4 4) => nil ------------------------------------------------------------------------------- (< number &rest numbers) Return t if each arg (a number or marker), is less than the next arg. (< 4 4) => nil (< 1 2 3) => t ------------------------------------------------------------------------------- (<= number &rest numbers) Return t if each arg (a number or marker) is less than or equal to the next. (<= 4 4) => t (<= 1 2 2 3) => t ------------------------------------------------------------------------------- (> number &rest numbers) Return t if each arg (a number or marker) is greater than the next arg. (> 4 4) => nil (> 3 2 1) => t ------------------------------------------------------------------------------- (>= number &rest numbers) Return t if each arg (a number or marker) is greater than or equal to the next. (>= 4 4) => t (>= 3 2 2 1) => t ------------------------------------------------------------------------------- (zerop number) Return t if NUMBER is zero. (zerop 0) => t ------------------------------------------------------------------------------- (natnump object) Return t if OBJECT is a nonnegative integer. (natnump -1) => nil (natnump 0) => t (natnump 23) => t ------------------------------------------------------------------------------- (cl-plusp number) Return t if NUMBER is positive. (cl-plusp 0) => nil (cl-plusp 1) => t ------------------------------------------------------------------------------- (cl-minusp number) Return t if NUMBER is negative. (cl-minusp 0) => nil (cl-minusp -1) => t ------------------------------------------------------------------------------- (cl-oddp integer) Return t if INTEGER is odd. (cl-oddp 3) => t ------------------------------------------------------------------------------- (cl-evenp integer) Return t if INTEGER is even. (cl-evenp 6) => t ------------------------------------------------------------------------------- (bignump object) Return t if OBJECT is a bignum. (bignump 4) => nil (bignump (expt 2 90)) => t ------------------------------------------------------------------------------- (fixnump object) Return t if OBJECT is a fixnum. (fixnump 4) => t (fixnump (expt 2 90)) => nil ------------------------------------------------------------------------------- (floatp object) Return t if OBJECT is a floating point number. (floatp 5.4) => t ------------------------------------------------------------------------------- (integerp object) Return t if OBJECT is an integer. (integerp 5.4) => nil ------------------------------------------------------------------------------- (numberp object) Return t if OBJECT is a number (floating point or integer). (numberp "5.4") => nil ------------------------------------------------------------------------------- (cl-digit-char-p char &optional radix) Test if CHAR is a digit in the specified RADIX (default 10). (cl-digit-char-p 53 10) => 5 (cl-digit-char-p 102 16) => 15 Operations (max number &rest numbers) Return largest of all the arguments (which must be numbers or markers). (max 7 9 3) => 9 ------------------------------------------------------------------------------- (min number &rest numbers) Return smallest of all the arguments (which must be numbers or markers). (min 7 9 3) => 3 ------------------------------------------------------------------------------- (abs arg) Return the absolute value of ARG. (abs -4) => 4 ------------------------------------------------------------------------------- (float arg) Return the floating point number equal to ARG. (float 2) => 2.0 ------------------------------------------------------------------------------- (truncate arg &optional divisor) Truncate a floating point number to an int. (truncate 1.2) => 1 (truncate -1.2) => -1 (truncate 5.4 2) => 2 ------------------------------------------------------------------------------- (floor arg &optional divisor) Return the largest integer no greater than ARG. (floor 1.2) => 1 (floor -1.2) => -2 (floor 5.4 2) => 2 ------------------------------------------------------------------------------- (ceiling arg &optional divisor) Return the smallest integer no less than ARG. (ceiling 1.2) => 2 (ceiling -1.2) => -1 (ceiling 5.4 2) => 3 ------------------------------------------------------------------------------- (round arg &optional divisor) Return the nearest integer to ARG. (round 1.2) => 1 (round -1.2) => -1 (round 5.4 2) => 3 ------------------------------------------------------------------------------- (random &optional limit) Return a pseudo-random integer. (random 6) => 5 Bit Operations (ash value count) Return integer VALUE with its bits shifted left by COUNT bit positions. (ash 1 4) => 16 (ash 16 -1) => 8 ------------------------------------------------------------------------------- (logand &rest ints-or-markers) Return bitwise-and of all the arguments. (logand #b10 #b111) => #b10 ------------------------------------------------------------------------------- (logior &rest ints-or-markers) Return bitwise-or of all the arguments. (logior 4 16) => 20 ------------------------------------------------------------------------------- (logxor &rest ints-or-markers) Return bitwise-exclusive-or of all the arguments. (logxor 4 16) => 20 ------------------------------------------------------------------------------- (lognot number) Return the bitwise complement of NUMBER. NUMBER must be an integer. (lognot 5) => -6 ------------------------------------------------------------------------------- (logcount value) Return population count of VALUE. (logcount 5) => 2 Floating Point (isnan x) Return non-nil if argument X is a NaN. (isnan 5.0) => nil ------------------------------------------------------------------------------- (frexp x) Get significand and exponent of a floating point number. (frexp 5.7) => (0.7125 . 3) ------------------------------------------------------------------------------- (ldexp sgnfcand exponent) Return SGNFCAND * 2**EXPONENT, as a floating point number. (ldexp 0.7125 3) => 5.7 ------------------------------------------------------------------------------- (logb arg) Returns largest integer <= the base 2 log of the magnitude of ARG. (logb 10.5) => 3 ------------------------------------------------------------------------------- (ffloor arg) Return the largest integer no greater than ARG, as a float. (ffloor 1.2) => 1.0 ------------------------------------------------------------------------------- (fceiling arg) Return the smallest integer no less than ARG, as a float. (fceiling 1.2) => 2.0 ------------------------------------------------------------------------------- (ftruncate arg) Truncate a floating point number to an integral float value. (ftruncate 1.2) => 1.0 ------------------------------------------------------------------------------- (fround arg) Return the nearest integer to ARG, as a float. (fround 1.2) => 1.0 Standard Math Functions (sin arg) Return the sine of ARG. (sin float-pi) => 1.2246467991473532e-16 ------------------------------------------------------------------------------- (cos arg) Return the cosine of ARG. (cos float-pi) => -1.0 ------------------------------------------------------------------------------- (tan arg) Return the tangent of ARG. (tan float-pi) => -1.2246467991473532e-16 ------------------------------------------------------------------------------- (asin arg) Return the inverse sine of ARG. (asin float-pi) => 0.0e+NaN ------------------------------------------------------------------------------- (acos arg) Return the inverse cosine of ARG. (acos float-pi) => 0.0e+NaN ------------------------------------------------------------------------------- (atan y &optional x) Return the inverse tangent of the arguments. (atan float-pi) => 1.2626272556789118 ------------------------------------------------------------------------------- (exp arg) Return the exponential base e of ARG. (exp 4) => 54.598150033144236 ------------------------------------------------------------------------------- (log arg &optional base) Return the natural logarithm of ARG. (log 54.59) => 3.9998507157936665 ------------------------------------------------------------------------------- (expt arg1 arg2) Return the exponential ARG1 ** ARG2. (expt 2 16) => 65536 ------------------------------------------------------------------------------- (sqrt arg) Return the square root of ARG. (sqrt -1) => -0.0e+NaN -- underground experts united https://dataswamp.org/~incal