From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Mario Lang Newsgroups: gmane.emacs.devel Subject: osc-insert-float32 Date: Tue, 17 Dec 2019 19:04:11 +0100 Message-ID: <8736diakx0.fsf@blind.guru> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="84171"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Dec 17 19:04:32 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1ihHCw-000Lle-O7 for ged-emacs-devel@m.gmane.org; Tue, 17 Dec 2019 19:04:30 +0100 Original-Received: from localhost ([::1]:44736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihHCv-00052N-KP for ged-emacs-devel@m.gmane.org; Tue, 17 Dec 2019 13:04:29 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:36493) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihHCl-000528-Us for emacs-devel@gnu.org; Tue, 17 Dec 2019 13:04:20 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ihHCk-0007pA-Pz for emacs-devel@gnu.org; Tue, 17 Dec 2019 13:04:19 -0500 Original-Received: from familiekainz.at ([37.187.20.171]:40010 helo=ns3035380.ip-37-187-20.eu) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ihHCk-0007oL-JQ for emacs-devel@gnu.org; Tue, 17 Dec 2019 13:04:18 -0500 Original-Received: by ns3035380.ip-37-187-20.eu (Postfix, from userid 110) id 0BFDD15A2; Tue, 17 Dec 2019 18:04:13 +0000 (UTC) Original-Received: from x1.blind.guru (84-115-55-45.cable.dynamic.surfer.at [84.115.55.45]) by ns3035380.ip-37-187-20.eu (Postfix) with ESMTPSA id 290F5157D for ; Tue, 17 Dec 2019 18:04:12 +0000 (UTC) Original-Received: by x1.blind.guru (Postfix, from userid 1000) id 76D6FE81B41; Tue, 17 Dec 2019 19:04:11 +0100 (CET) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 37.187.20.171 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:243441 Archived-At: Hi. 14 years ago, I wrote this beast to be able to send IEEE floating point values over the network (Open Sound Control). Reading it today, I am actually surprised I was driven enough to get this working. I am wondering, is there a better way to achieve this today? Maybe something in Emacs itself I missed? If no, is there a better way to test for negative zero and 0.0e+NaN? ;; From elpa package osc.el (defun osc-insert-float32 (value) (let (s (e 0) f) (cond ((string=3D (format "%f" value) (format "%f" -0.0)) (setq s 1 f 0)) ((string=3D (format "%f" value) (format "%f" 0.0)) (setq s 0 f 0)) ((=3D value 1.0e+INF) (setq s 0 e 255 f (1- (expt 2 23)))) ((=3D value -1.0e+INF) (setq s 1 e 255 f (1- (expt 2 23)))) ((string=3D (format "%f" value) (format "%f" 0.0e+NaN)) (setq s 0 e 255 f 1)) (t (setq s (if (>=3D value 0.0) (progn (setq f value) 0) (setq f (* -1 value)) 1)) (while (>=3D (* f (expt 2.0 e)) 2.0) (setq e (1- e))) (if (=3D e 0) (while (< (* f (expt 2.0 e)) 1.0) (setq e (1+ e)))) (setq f (round (* (1- (* f (expt 2.0 e))) (expt 2 23))) e (+ (* -1 e) 127)))) (insert (+ (lsh s 7) (lsh (logand e #XFE) -1)) (+ (lsh (logand e #X01) 7) (lsh (logand f #X7F0000) -16)) (lsh (logand f #XFF00) -8) (logand f #XFF)))) --=20 CYa, =E2=A1=8D=E2=A0=81=E2=A0=97=E2=A0=8A=E2=A0=95