[ruby-core:118788] [Ruby master Bug#20662] pack("g") completely discards any actual NaN value and always packs the same single-precision bytes for a NaN
From:
"cabo (Carsten Bormann) via ruby-core" <ruby-core@...>
Date:
2024-08-04 15:59:20 UTC
List:
ruby-core #118788
SXNzdWUgIzIwNjYyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgY2FibyAoQ2Fyc3RlbiBCb3JtYW5uKS4N Cg0KDQo+IGNhYm8gKENhcnN0ZW4gQm9ybWFubikgd3JvdGU6DQo+PiBwYWNrKCJHIikvdW5wYWNr KCJHIikgd29ya3MgZ3JlYXQgd2l0aCBOYU4gdmFsdWVzLiBIb3dldmVyLA0KPg0KPiBGaXJzdCwg UnVieSBwcm92aWRlcyBvbmx5IGBGbG9hdDo6TkFOYCwgYW5kIGRvZXMgbm90IGNvbnNpZGVyIHBh eWxvYWRzIG9mIE5hTiB2YWx1ZXMuDQoNClJpZ2h0LiAgVGhlIG9ubHkgaW50ZXJmYWNlIFJ1Ynkg cHJvdmlkZXMgdG8gTmFOIHZhbHVlcyBpcyB2aWEgcGFjay91bnBhY2suDQoNCj4+IC0gYHBhY2so ImciKWAgY29tcGxldGVseSBkaXNjYXJkcyBhbnkgYWN0dWFsIE5hTiB2YWx1ZSBhbmQgYWx3YXlz IHBhY2tzIHRoZSBzYW1lIGJ5dGVzIGZvciBhIE5hTg0KPj4gICgiYnVnIGFzIGltcGxlbWVudGVk IiBpbiBgVkFMVUVfdG9fZmxvYXRgKQ0KPg0KPiBTaW5jZSBgIkciYCBwcmVzZXJ2ZXMgdGhlIHBh eWxvYWQsIGl0IG1heSBiZSBiZXR0ZXIgdG8gcHJlc2VydmUgaXQgZm9yIGAiZyJgIGFzIHdlbGws IElNTy4NCg0KSW5kZWVkLg0KDQpUaGUgY29kZSBpbiBwYWNrLmMvVkFMVUVfdG9fZmxvYXQgZm9y IE5hTnMgdXNlcyDigJxyZXR1cm4gTkFO4oCdIHdoaWNoIGRpc2NhcmRzIHRoZSB2YWx1ZS4NClRo aXMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGUg4oCccmV0dXJu IGTigJ0gZnVydGhlciBkb3duIGluIHBhY2suYyAod2hpY2ggaW1wbGllcyBhIGNvbnZlcnNpb24g ZnJvbSBSdWJ54oCZcyBkb3VibGUgdG8gdGhlIGZsb2F0IHdlIG5lZWQgZm9yIHBhY2so4oCYZ+KA mSksIHdoaWNoIGFsc28gd29ya3MgZm9yIE5hTnMsIHdpdGggdGhlIGRldGFpbCBiZWxvdykuDQoN Ckhvd2V2ZXIsIHRoaXMgc2ltcGxlIGZpeCBpcyBjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0 IGZsb2F04qyMZG91YmxlIGNvbnZlcnNpb25zIG9mIE5hTiB2YWx1ZXMgYWx3YXlzIHNlZW0gdG8g c2V0IHRoZSBxdWlldCBiaXQuDQoNCkkgc2xpZ2h0bHkgcmV3cm90ZSB5b3VyIGRlbW8gcHJvZ3Jh bSB0byBkZW1vbnN0cmF0ZSBob3cgdGhlIHF1aWV0IGJpdCBjYW4gYmUgcmVzdG9yZWQgYWZ0ZXIg ZmxvYXTirIxkb3VibGUgY29udmVyc2lvbiBpbiBlaXRoZXIgZGlyZWN0aW9uLg0KDQpgYGBDDQoj aW5jbHVkZSA8ZmxvYXQuaD4NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxzdGRpby5o Pg0KDQojZGVmaW5lIEYzMl9RQklUIDB4MDA0MDAwMDANCiNkZWZpbmUgRjY0X1FCSVRfT0ZGU0VU IDI5ICAgICAgLyogMzIgbW9yZSBiaXRzLCBtaW51cyAzIGZvciBtb3JlIGV4cG9uZW50ICovDQoj ZGVmaW5lIEY2NF9RQklUICgodWludDY0X3QpRjMyX1FCSVQgPDwgRjY0X1FCSVRfT0ZGU0VUKQ0K DQp1aW50MzJfdCBleGFtcGxlc1syXSA9IHsweDdmYmZmMDAwLCAweDdmZmZmMDAwfTsNCg0KaW50 IG1haW4odm9pZCkNCnsNCiAgdW5pb24gew0KICAgIHVpbnQzMl90IGI7DQogICAgZmxvYXQgZjsN CiAgfSBmMzI7DQogIHVuaW9uIHsNCiAgICB1aW50NjRfdCBiOw0KICAgIGRvdWJsZSBkOw0KICB9 IGY2NDsNCiAgdWludDMyX3QgcWJpdDsNCg0KICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykg ew0KDQogICAgZjMyLmIgPSBleGFtcGxlc1tpXTsgICAgICAgICAgLyogbm90ZSBxdWlldCBiaXQg bm90IHNldCBpbiBmaXJzdCBleGFtcGxlKi8NCiAgICBwcmludGYoInNldHVwIGYzMiB3aXRoICV4 ID09ICVmXG4iLCBmMzIuYiwgZjMyLmYpOw0KDQogICAgLyogKDEpIEV4cGFuZCBmMzIgdG8gZjY0 LCBhcyBuZWVkZWQgaW4gdW5wYWNrKCdnJykgKi8NCg0KICAgIGY2NC5kID0gZjMyLmY7ICAgICAg ICAgICAgICAgLyogcXVpZXQgYml0IGdldHMgc2V0IGhlcmUgKi8NCiAgICBwcmludGYoIkMgZXhw YW5kcyB0aGlzIHRvICVsbHggPT0gJWZcbiIsIGY2NC5iLCBmNjQuZCk7DQoNCiAgICAvKiBmaXgg dXAgZjY0IGJ5IGNvcHlpbmcgdGhlIGxvc3QgcXVpZXQgYml0IGZyb20gZjMyLmINCiAgICAgICBP YnZpb3VzbHksIGRvIHRoaXMgaW4gTmFOIGJyYW5jaCBvbmx5Lg0KICAgICovDQoNCiAgICBxYml0 ID0gZjMyLmIgJiBGMzJfUUJJVDsNCiAgICBwcmludGYoInFiaXQ6ICV4XG4iLCBxYml0KTsNCiAg ICBmNjQuYiA9IChmNjQuYiAmIH5GNjRfUUJJVCkgfCAoKHVpbnQ2NF90KXFiaXQgPDwgRjY0X1FC SVRfT0ZGU0VUKTsNCiAgICBwcmludGYoInFiaXQgZml4ZWQgdG8gJWxseCA9PSAlZlxuIiwgZjY0 LmIsIGY2NC5kKTsNCg0KICAgIHByaW50ZigiXG4iKTsNCg0KICAgIC8qICgyKSBDb250cmFjdCBm NjQgdG8gZjMyLCBhcyBuZWVkZWQgaW4gcGFjaygnZycpICovDQoNCiAgICBmMzIuZiA9IChmbG9h dClmNjQuZDsNCiAgICBwcmludGYoImNvbnZlcnQgYmFjayB0byBmMzI6ICV4ID09ICVmXG4iLCBm MzIuYiwgZjMyLmYpOw0KDQogICAgLyogZml4IHVwIGYzMiBieSBjb3B5aW5nIHRoZSBsb3N0IHF1 aWV0IGJpdCBmcm9tIGY2NC5iDQogICAgICAgT2J2aW91c2x5LCBkbyB0aGlzIGluIE5hTiBicmFu Y2ggb25seS4NCiAgICAqLw0KICAgIHFiaXQgPSAoZjY0LmIgPj4gRjY0X1FCSVRfT0ZGU0VUKSAm IEYzMl9RQklUOw0KICAgIHByaW50ZigicWJpdDogJXhcbiIsIHFiaXQpOw0KDQogICAgZjMyLmIg PSAoZjMyLmIgJiB+RjMyX1FCSVQpIHwgcWJpdDsNCiAgICBwcmludGYoImZpeGVkIHRoaXMgdG8g JXggPT0gJWZcbiIsIGYzMi5iLCBmMzIuZik7DQoNCiAgICBwcmludGYoIlxuXG4iKTsNCg0KICB9 DQoNCiAgcmV0dXJuIDA7DQp9DQpgYGANCmBgYHNoZWxsLXNlc3Npb24NCiQgbWFrZSBub24tc2ds LWRibCAmJiAuL25vbi1zZ2wtZGJsDQouLi4NCnNldHVwIGYzMiB3aXRoIDdmYmZmMDAwID09IG5h bg0KQyBleHBhbmRzIHRoaXMgdG8gN2ZmZmZlMDAwMDAwMDAwMCA9PSBuYW4NCnFiaXQ6IDANCnFi aXQgZml4ZWQgdG8gN2ZmN2ZlMDAwMDAwMDAwMCA9PSBuYW4NCg0KY29udmVydCBiYWNrIHRvIGYz MjogN2ZmZmYwMDAgPT0gbmFuDQpxYml0OiAwDQpmaXhlZCB0aGlzIHRvIDdmYmZmMDAwID09IG5h bg0KDQoNCnNldHVwIGYzMiB3aXRoIDdmZmZmMDAwID09IG5hbg0KQyBleHBhbmRzIHRoaXMgdG8g N2ZmZmZlMDAwMDAwMDAwMCA9PSBuYW4NCnFiaXQ6IDQwMDAwMA0KcWJpdCBmaXhlZCB0byA3ZmZm ZmUwMDAwMDAwMDAwID09IG5hbg0KDQpjb252ZXJ0IGJhY2sgdG8gZjMyOiA3ZmZmZjAwMCA9PSBu YW4NCnFiaXQ6IDQwMDAwMA0KZml4ZWQgdGhpcyB0byA3ZmZmZjAwMCA9PSBuYW4NCmBgYA0KDQoN Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkJ1ZyAjMjA2NjI6IHBh Y2soImciKSBjb21wbGV0ZWx5IGRpc2NhcmRzIGFueSBhY3R1YWwgTmFOIHZhbHVlIGFuZCBhbHdh eXMgcGFja3MgdGhlIHNhbWUgc2luZ2xlLXByZWNpc2lvbiBieXRlcyBmb3IgYSBOYU4NCmh0dHBz Oi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8yMDY2MiNjaGFuZ2UtMTA5MzQ1DQoNCiogQXV0 aG9yOiBjYWJvIChDYXJzdGVuIEJvcm1hbm4pDQoqIFN0YXR1czogT3Blbg0KKiBydWJ5IC12OiBy dWJ5IDMuMy40ICgyMDI0LTA3LTA5IHJldmlzaW9uIGJlMTA4OWM4ZWMpIFthcm02NC1kYXJ3aW4y M10NCiogQmFja3BvcnQ6IDMuMTogVU5LTk9XTiwgMy4yOiBVTktOT1dOLCAzLjM6IFVOS05PV04N Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmBwYWNrKCJHIilgL2B1 bnBhY2soIkciKWAgd29ya3MgZ3JlYXQgd2l0aCBOYU4gdmFsdWVzLiAgSG93ZXZlciwNCg0KLSBg cGFjaygiZyIpYCBjb21wbGV0ZWx5IGRpc2NhcmRzIGFueSBhY3R1YWwgTmFOIHZhbHVlIGFuZCBh bHdheXMgcGFja3MgdGhlIHNhbWUgYnl0ZXMgZm9yIGEgTmFODQogICgiYnVnIGFzIGltcGxlbWVu dGVkIiBpbiBgVkFMVUVfdG9fZmxvYXRgKQ0KDQpBbHNvOg0KDQotIGB1bnBhY2soImciKWAgYWx3 YXlzIHNldHMgdGhlIHF1aWV0IGJpdCB0byAxIGluIHRoZSBgRmxvYXRgIHJlc3VsdA0KICAobG9j YXRpb24gb2YgYnVnIG5vdCBvYnZpb3VzIHRvIG1lKQ0KDQoNCi0tLUZpbGVzLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCnNob3didWcucmIgKDMuMjEgS0IpDQpzaG93YnVnLWFybS50 eHQgKDUuNDggS0IpDQpzaG93YnVnLWludGVsLnR4dCAoNS40OCBLQikNCg0KDQotLSANCmh0dHBz Oi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1 YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxl YXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1s YW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=