[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--