[PATCH] max/min on nan arguments

Felix Winkelmann via Chicken-users <[email protected]> Sun, 02 Aug 2026 16:34:34 +0200
Newsgroups gmane.lisp.scheme.chicken
Message-ID <[email protected]>
--df236e980212a0a2a9633a92c594d3a1f495b00fb193e117b18b2479242a
Content-Type: multipart/alternative;
 boundary=0ff2959a001ce9977008d0509d678357b2c1a2ffb08b07fe5bdcd83dc353

--0ff2959a001ce9977008d0509d678357b2c1a2ffb08b07fe5bdcd83dc353
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8

Hi!

Attached a patch that partially takes your suggestions into
account.

I decided to go with option #1, as this is what C99's
fmin(3)/fmax(3) provides. I thought it would make sense to
have at least "fpmin"/"fpmax" being consistent with "min"/"max",
but we can't use fmax(3) in the C runtime as this would require
allocating which is difficult in this context (see "C_i_flonum_max").

So C_i_flonum_max/_min add a nan-check and return any non-nan
value unchanged. I changed "max"/"min" to check for nans and
expose (hopefully) the same behaviour.

I am reluctant to bother with negative zero - it is an implementation
artifact of IEEE and nonsensical, IMHO. Once you start
adding rules for "consistent" handling of negative zeroes, people
will give it semantic meaning, which I'd rather not encourage.


cheers,
felix


--0ff2959a001ce9977008d0509d678357b2c1a2ffb08b07fe5bdcd83dc353--

--df236e980212a0a2a9633a92c594d3a1f495b00fb193e117b18b2479242a
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=0001-Make-max-min-more-consistent-with-respect-to-nan-s.patch
Content-Type: text/x-patch; charset=utf-8;
 name=0001-Make-max-min-more-consistent-with-respect-to-nan-s.patch

RnJvbSBkNDE5MDM5NWQ5MGFiNGQ3Y2Y4NzNiZGNmMmIyNDFkZmE3OWRhZWNkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBmZWxpeCA8ZmVsaXhAY2FsbC13aXRoLWN1cnJlbnQtY29udGlu
dWF0aW9uLm9yZz4KRGF0ZTogU3VuLCAyIEF1ZyAyMDI2IDE2OjA4OjI2ICswMjAwClN1YmplY3Q6
IFtQQVRDSF0gTWFrZSBtYXgvbWluIG1vcmUgY29uc2lzdGVudCB3aXRoIHJlc3BlY3QgdG8gbmFu
J3MuCgooRm9sbG93aW5nIHN1Z2dlc3Rpb25zIGJ5IFBldGVyIE1jR29yb24pCi0tLQogY2hpY2tl
bi5oICAgICAgICAgICAgICB8IDEyICsrKysrKysrLS0tLQogbGlicmFyeS5zY20gICAgICAgICAg
ICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiB0ZXN0cy9udW1i
ZXJzLXRlc3Quc2NtIHwgMTcgKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNTEg
aW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY2hpY2tlbi5oIGIv
Y2hpY2tlbi5oCmluZGV4IDczNjUxZTkzLi5jN2I5YTRkOCAxMDA2NDQKLS0tIGEvY2hpY2tlbi5o
CisrKyBiL2NoaWNrZW4uaApAQCAtMTExNCw2ICsxMTE0LDggQEAgdHlwZWRlZiB2b2lkIChDX2Nj
YWxsICpDX3Byb2MpKENfd29yZCwgQ193b3JkICopIENfbm9yZXQ7CiAjZGVmaW5lIENfaXNuYW4o
ZikgICAgICAgICAgICAgICAgIGlzbmFuKGYpCiAjZGVmaW5lIENfaXNpbmYoZikgICAgICAgICAg
ICAgICAgIGlzaW5mKGYpCiAjZGVmaW5lIENfaXNmaW5pdGUoZikgICAgICAgICAgICAgIGlzZmlu
aXRlKGYpCisjZGVmaW5lIENfaXNncmVhdGVyKHgsIHkpICAgICAgIGlzZ3JlYXRlcih4LCB5KQor
I2RlZmluZSBDX2lzbGVzcyh4LCB5KSAgICAgICAgICAgIGlzbGVzcyh4LCB5KQogCiAjZGVmaW5l
IENfc3RhY2tfb3ZlcmZsb3dfY2hlY2sgICAgQ19zdGFja19jaGVjazEoQ19zdGFja19vdmVyZmxv
dyhOVUxMKSkKIApAQCAtMzIwMSw4ICszMjAzLDkgQEAgaW5saW5lIHN0YXRpYyBDX3dvcmQgQ19p
X2Zsb251bV9taW4oQ193b3JkIHgsIENfd29yZCB5KQogICBkb3VibGUKICAgICB4ZiA9IENfZmxv
bnVtX21hZ25pdHVkZSh4KSwKICAgICB5ZiA9IENfZmxvbnVtX21hZ25pdHVkZSh5KTsKLQotICBy
ZXR1cm4geGYgPCB5ZiA/IHggOiB5OworICBpZihDX2lzbmFuKHhmKSkgcmV0dXJuIHk7CisgIGlm
KENfaXNuYW4oeWYpKSByZXR1cm4geDsKKyAgcmV0dXJuIENfaXNsZXNzKHhmLCB5ZikgPyB4IDog
eTsKIH0KIAogCkBAIC0zMjExLDggKzMyMTQsOSBAQCBpbmxpbmUgc3RhdGljIENfd29yZCBDX2lf
ZmxvbnVtX21heChDX3dvcmQgeCwgQ193b3JkIHkpCiAgIGRvdWJsZQogICAgIHhmID0gQ19mbG9u
dW1fbWFnbml0dWRlKHgpLAogICAgIHlmID0gQ19mbG9udW1fbWFnbml0dWRlKHkpOwotCi0gIHJl
dHVybiB4ZiA+IHlmID8geCA6IHk7CisgIGlmKENfaXNuYW4oeGYpKSByZXR1cm4geTsKKyAgaWYo
Q19pc25hbih5ZikpIHJldHVybiB4OworICByZXR1cm4gQ19pc2dyZWF0ZXIoeGYsIHlmKSA/IHgg
OiB5OwogfQogCiBpbmxpbmUgc3RhdGljIENfd29yZCBDX3VfaV9pbnRlZ2VyX3NpZ251bShDX3dv
cmQgeCkKZGlmZiAtLWdpdCBhL2xpYnJhcnkuc2NtIGIvbGlicmFyeS5zY20KaW5kZXggNzM2YTFl
OWYuLmQ0MTgwMjRhIDEwMDY0NAotLS0gYS9saWJyYXJ5LnNjbQorKysgYi9saWJyYXJ5LnNjbQpA
QCAtMjYyMSwyNSArMjYyMSwzOSBAQCBFT0YKIAogKHNldCEgc2NoZW1lI21heAogICAobGFtYmRh
ICh4MSAuIHhzKQotICAgIChsZXQgbG9vcCAoKGkgKCMjY29yZSNpbmxpbmUgIkNfaV9mbG9udW1w
IiB4MSkpIChtIHgxKSAoeHMgeHMpKQotICAgICAgKCMjc3lzI2NoZWNrLW51bWJlciBtICdtYXgp
CisgICAgKCMjc3lzI2NoZWNrLW51bWJlciB4MSAnbWF4KQorICAgIChsZXQgbG9vcCAoKGkgKCMj
Y29yZSNpbmxpbmUgIkNfaV9mbG9udW1wIiB4MSkpCisgICAgICAgICAgICAgICAobSB4MSkgCisg
ICAgICAgICAgICAgICAoeHMgeHMpIAorICAgICAgICAgICAgICAgKG4gKCMjY29yZSNpbmxpbmUg
IkNfaV9uYW5wIiB4MSkpKQogICAgICAgKGlmIChudWxsPyB4cykKIAkgIChpZiBpIChleGFjdC0+
aW5leGFjdCBtKSBtKQotCSAgKGxldCAoKGggKCMjc3lzI3Nsb3QgeHMgMCkpKQotCSAgICAobG9v
cCAob3IgaSAoIyNjb3JlI2lubGluZSAiQ19pX2Zsb251bXAiIGgpKQotCQkgIChpZiAoPiBoIG0p
IGggbSkKLQkJICAoIyNzeXMjc2xvdCB4cyAxKSkgKSApICkgKSkKKwkgIChsZXQqICgoaCAoIyNz
eXMjc2xvdCB4cyAwKSkKKyAgICAgICAgICAgICAgICAgKF8gKCMjc3lzI2NoZWNrLW51bWJlciBo
ICdtYXgpKQorICAgICAgICAgICAgICAgICAoZiAoIyNjb3JlI2lubGluZSAiQ19pX2Zsb251bXAi
IGgpKQorICAgICAgICAgICAgICAgICAobnh0ICgjI3N5cyNzbG90IHhzIDEpKSkKKyAgICAgICAg
ICAgIChjb25kICgoIyNjb3JlI2lubGluZSAiQ19pX25hbnAiIGgpIChsb29wIGkgbSBueHQgbikp
CisgICAgICAgICAgICAgICAgICAobiAobG9vcCAob3IgaSBmKSBoIG54dCAjZikpCisgICAgICAg
ICAgICAgICAgICAoKD4gaCBtKSAobG9vcCAob3IgaSBmKSBoIG54dCAjZikpCisgICAgICAgICAg
ICAgICAgICAoZWxzZSAobG9vcCAob3IgaSBmKSBtIG54dCBuKSkpKSkpKSkKIAogKHNldCEgc2No
ZW1lI21pbgogICAobGFtYmRhICh4MSAuIHhzKQotICAgIChsZXQgbG9vcCAoKGkgKCMjY29yZSNp
bmxpbmUgIkNfaV9mbG9udW1wIiB4MSkpIChtIHgxKSAoeHMgeHMpKQotICAgICAgKCMjc3lzI2No
ZWNrLW51bWJlciBtICdtaW4pCisgICAgKCMjc3lzI2NoZWNrLW51bWJlciB4MSAnbWluKQorICAg
IChsZXQgbG9vcCAoKGkgKCMjY29yZSNpbmxpbmUgIkNfaV9mbG9udW1wIiB4MSkpCisgICAgICAg
ICAgICAgICAobSB4MSkgCisgICAgICAgICAgICAgICAoeHMgeHMpIAorICAgICAgICAgICAgICAg
KG4gKCMjY29yZSNpbmxpbmUgIkNfaV9uYW5wIiB4MSkpKQogICAgICAgKGlmIChudWxsPyB4cykK
IAkgIChpZiBpIChleGFjdC0+aW5leGFjdCBtKSBtKQotCSAgKGxldCAoKGggKCMjc3lzI3Nsb3Qg
eHMgMCkpKQotCSAgICAobG9vcCAob3IgaSAoIyNjb3JlI2lubGluZSAiQ19pX2Zsb251bXAiIGgp
KQotCQkgIChpZiAoPCBoIG0pIGggbSkKLQkJICAoIyNzeXMjc2xvdCB4cyAxKSkgKSApICkgKSkK
KwkgIChsZXQqICgoaCAoIyNzeXMjc2xvdCB4cyAwKSkKKyAgICAgICAgICAgICAgICAgKF8gKCMj
c3lzI2NoZWNrLW51bWJlciBoICdtaW4pKQorICAgICAgICAgICAgICAgICAoZiAoIyNjb3JlI2lu
bGluZSAiQ19pX2Zsb251bXAiIGgpKQorICAgICAgICAgICAgICAgICAobnh0ICgjI3N5cyNzbG90
IHhzIDEpKSkKKyAgICAgICAgICAgIChjb25kICgoIyNjb3JlI2lubGluZSAiQ19pX25hbnAiIGgp
IChsb29wIGkgbSBueHQgbikpCisgICAgICAgICAgICAgICAgICAobiAobG9vcCAob3IgaSBmKSBo
IG54dCAjZikpCisgICAgICAgICAgICAgICAgICAoKDwgaCBtKSAobG9vcCAob3IgaSBmKSBoIG54
dCAjZikpCisgICAgICAgICAgICAgICAgICAoZWxzZSAobG9vcCAob3IgaSBmKSBtIG54dCBuKSkp
KSkpKSkKIAogKHNldCEgc2NoZW1lI2V4cAogICAobGFtYmRhIChuKQpkaWZmIC0tZ2l0IGEvdGVz
dHMvbnVtYmVycy10ZXN0LnNjbSBiL3Rlc3RzL251bWJlcnMtdGVzdC5zY20KaW5kZXggMjk4Nzc1
MzkuLjI4OThmMmZiIDEwMDY0NAotLS0gYS90ZXN0cy9udW1iZXJzLXRlc3Quc2NtCisrKyBiL3Rl
c3RzL251bWJlcnMtdGVzdC5zY20KQEAgLTg1NCw2ICs4NTQsMjMgQEAKIAogICh0ZXN0LWVxdWFs
ICJtYXgiIChtYXggMyA0KSA0KQogICh0ZXN0LWVxdWFsICJtYXgiIChtYXggMy45IDQpIDQuMCkK
KyAodGVzdC1lcXVhbCAibWF4IiAobWF4ICtuYW4uMCAxLjAgMi4wKSAyLjApCisgKHRlc3QtZXF1
YWwgIm1heCIgKG1heCAxLjAgK25hbi4wIDIuMCkgMi4wKQorICh0ZXN0LWVxdWFsICJtYXgiICht
YXggMS4wIDIuMCArbmFuLjApIDIuMCkKKyAodGVzdC1lcXVhbCAibWF4IiAobWF4ICtuYW4uMCAx
LjAgMikgMi4wKQorICh0ZXN0LWVxdWFsICJtYXgiIChtYXggMS4wICtuYW4uMCAyKSAyLjApCisg
KHRlc3QtZXF1YWwgIm1heCIgKG1heCAxLjAgMiArbmFuLjApIDIuMCkKKyAodGVzdC1hc3NlcnQg
Im1heCIgKG5hbj8gKG1heCArbmFuLjApKSkKKyAodGVzdC1hc3NlcnQgIm1heCIgKG5hbj8gKG1h
eCArbmFuLjAgK25hbi4wKSkpCisKKyAodGVzdC1lcXVhbCAibWluIiAobWluICtuYW4uMCAxLjAg
Mi4wKSAxLjApCisgKHRlc3QtZXF1YWwgIm1pbiIgKG1pbiAxLjAgK25hbi4wIDIuMCkgMS4wKQor
ICh0ZXN0LWVxdWFsICJtaW4iIChtaW4gMS4wIDIuMCArbmFuLjApIDEuMCkKKyAodGVzdC1lcXVh
bCAibWluIiAobWluICtuYW4uMCAxIDIuMCkgMS4wKQorICh0ZXN0LWVxdWFsICJtaW4iIChtaW4g
MSArbmFuLjAgMi4wKSAxLjApCisgKHRlc3QtZXF1YWwgIm1pbiIgKG1pbiAxIDIuMCArbmFuLjAp
IDEuMCkKKyAodGVzdC1hc3NlcnQgIm1pbiIgKG5hbj8gKG1pbiArbmFuLjApKSkKKyAodGVzdC1h
c3NlcnQgIm1pbiIgKG5hbj8gKG1pbiArbmFuLjAgK25hbi4wKSkpCiAKICAodGVzdC1lcXVhbCAi
bW9kdWxvIiAobW9kdWxvIDEzIDQpIDEpCiAgKHRlc3QtZXF1YWwgIm1vZHVsbyIgKG1vZHVsbyAx
My4wIDQpIDEuMCkKLS0gCjIuNTAuMQoK
--df236e980212a0a2a9633a92c594d3a1f495b00fb193e117b18b2479242a--