Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:121426 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 56578 invoked from network); 19 Oct 2023 07:25:00 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 19 Oct 2023 07:25:00 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id D5419180506 for ; Thu, 19 Oct 2023 00:24:58 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,HTML_MESSAGE, RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS34011 80.237.132.0/24 X-Spam-Virus: No X-Envelope-From: Received: from wp160.webpack.hosteurope.de (wp160.webpack.hosteurope.de [80.237.132.167]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 19 Oct 2023 00:24:57 -0700 (PDT) Received: from [176.95.78.98] (helo=[192.168.3.113]); authenticated by wp160.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) id 1qtNOq-00044k-2h; Thu, 19 Oct 2023 09:24:56 +0200 Message-ID: <89bcb87c-d579-41ce-b449-a70040827d6a@mabe.berlin> Date: Thu, 19 Oct 2023 09:24:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: internals@lists.php.net References: Content-Language: en-US Autocrypt: addr=marc@mabe.berlin; keydata= xsBNBFby8roBCAD4qHjbk9+V3SmB5DfpkTtX58jYJ9VXVfF54MDoI0fQiYvKyrrghfO78alH c12RsEZxLH2F5kEfu8WO4wA4apg2gBnRRxqPj7krsct1ySOAdMrRVp8Wtaeaznpdcn2gJZyA MSI6LTzebT25N77ksvSrUi1BuCKyOa7SmYff3xGgOwYsHQlT5opMNGPCVegiPmO/K37anwts gj6L7RVtjXtp2Z3wAs6r3EmO318PL48xDLUgYMvEFAPJglth5FGH2En6n6HFIhxh43LqXQiN eHVjLjS2y8huNBswwc9ZVxk3ip5z/GCmpWnNkgGBOSJ7loJRsq2tOaU6yU8KWb5rhOoFABEB AAHNIU1hcmMgQmVubmV3aXR6IDxtYXJjQG1hYmUuYmVybGluPsLAeAQTAQIAIgUCVvLyugIb AwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQOTar91O8iM6jzggAwvV6MqU/hcAI6ldp xVjucGz2J9cAWtva8GL+rm9zvEs7EENtamehJiZob/CTw50WiI/zsJzPblktpT0D2AFBEp9k P5/8CmCpZzxYPsxnLtsFM52fOBpO+aP0PSStBpJjndjBH7HPqKcTCXM3ZM+SL6lyRweAJR7G +JXIZbuUrbjB2lbGx3itNZ6TeXqqnE6KTXNKLEbNHfVdzE4sPDkmuZRo/M2h+gmeS1iQb29W BmhvL6czugCQI9rYl7C4Nci9wPii1lTYyfCWQfQKID4/F2HiOv+N/vDMCK1xV8TUeCy8w4X+ nYj+wDog046ki9lUM60oPij6WoSJLqfsXr1kNc7ATQRW8vK6AQgAq7QYLB1Dz+8RSi5AGJP1 tOFQXtcxyOhNVQZsI1mCQiHay4wteQ+5m4EOUuR+FrFIlnbSrPdTkKD2wvQDHVqpZivThBpJ vara/ick0wi2R3dasu1sPMu1P6h1EwUsydhviNJB07aLfPAWD6eoqmGTd8236znIIq7mbnNp OnxIQxviTyELUekrNw38uQtVzR6XZv9PAThA2o1J1JZID7QUpKcNyo9ebYlwxyS+xzhA4DLD qfD6O5sKoKvxEf2fIZeP0ETPpHNYk0WiWnmNoPy8eEY07LriYALVidBwPBcxus0wGoKf8Nun y2aE13SHmj0ioBI1bXMGJx3hEbvzXK6WrwARAQABwsBfBBgBAgAJBQJW8vK6AhsMAAoJEDk2 q/dTvIjOkowIAI70P8U4j3eqyK/7x1bnCZZRcpwZ1aH+LR1yMKTINo9NDqlOBWQTLT69YMfV 4UN+nTSiD/uLw1fSeLSzBwpoalCMLPVOX/d3Mq5JtL5cKtWUTIVf3Vb7VbN4Rvb8HgWjeSnM 1PiG9yQBmLKI68sG/gdgvA/xANdUatkDgG0yj8PCdt+Vy4EblXbIAXZXJ6eRugSKowTjst7i HXKOJxivomHFcmqmkiqjwGTGx/jrhbDtEpPDRk+U9W45D4CbUcyPR6lMSrje5JPGQDv/45M5 wPe286YelBjnb0cWRJpA7GZCWDKZOsQ2H6cCRBi8i4m+vfRk7GLA536XnmvWxKFVP9U= In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------nNivevpEvYZwsT2CjPdgwvjw" X-bounce-key: webpack.hosteurope.de;marc@mabe.berlin;1697700298;f07e337f; X-HE-SMSGID: 1qtNOq-00044k-2h Subject: Re: [PHP-DEV] [RFC] [Discussion] Rounding Integers as int From: marc@mabe.berlin (Marc Bennewitz) --------------nNivevpEvYZwsT2CjPdgwvjw Content-Type: multipart/mixed; boundary="------------A31juBd9iGYDTmBJ1YsILPHT"; protected-headers="v1" From: Marc Bennewitz To: internals@lists.php.net Message-ID: <89bcb87c-d579-41ce-b449-a70040827d6a@mabe.berlin> Subject: Re: [PHP-DEV] [RFC] [Discussion] Rounding Integers as int References: In-Reply-To: --------------A31juBd9iGYDTmBJ1YsILPHT Content-Type: multipart/mixed; boundary="------------HfJqgMAQcgq2ZLODRDQnmqJ1" --------------HfJqgMAQcgq2ZLODRDQnmqJ1 Content-Type: multipart/alternative; boundary="------------a5RAUW8pnaj0RNsS0omrxOKK" --------------a5RAUW8pnaj0RNsS0omrxOKK Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkgSmFrdWIsDQoNCk9uIDE2LjEwLjIzIDAwOjE3LCBKYWt1YiBaZWxlbmthIHdyb3RlOg0K Pj4gWW91ciBKU09OIGV4YW1wbGUgaXMgYSBiaXQgdW5yZWxhdGVkIGJlY2F1c2UgaWYgeW91 IGNhcmUgYWJvdXQgeW91cg0KPj4gdHlwZXMgeW91ciBzaG91bGQgaGF2ZSB1c2VkIEpTT05f UkVTRVJWRV9aRVJPX0ZSQUNUSU9OIGluIHRoZSBmaXJzdA0KPj4gcGxhY2UgZWxzZSB5b3Ug c2hvdWxkIG5vdCBjYXJlIGFib3V0IGludCB2cyBmbG9hdCBhdCBhbGwuDQo+Pg0KPj4NCj4g VGhlIHRoaW5nIGlzIHRoYXQgSlNPTiBtaWdodCBiZSBlbmNvZGVkIGJ5IGFub3RoZXIgYXBw bGljYXRpb24gdGhhdCBkb2Vzbid0DQo+IGNhcmUgYWJvdXQgdHlwZXMgdGhhdCBtdWNoLiBJ biBmYWN0IGluIEpTT04gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuDQo+IDIuMCBh bmQgMi4gU28gdGhpcyBpcyBxdWl0ZSBwb3NzaWJsZSBzaXR1YXRpb24gSU1ITy4NCg0KVGhh dCdzIG9idmlvdXNseSB0cnVlIGJ1dCBvbiB0aGUgc2FtZSB0aW1lIHlvdSBzaG91bGQgdmFs aWRhdGUgYW5kIA0KZmlsdGVyIHlvdXIgaW5wdXQgZGF0YS4gQW5kIGlmIHlvdSBleHBlY3Qg YSBmbG9hdGluZyBwb2ludCBudW1iZXIgeW91IA0KbmVlZCB0byBoYW5kbGUgdGhhdCBjYXNl IGV4cGxpY2l0bHkgYmVmb3JlIHByb2Nlc3NpbmcgYW5kIG5vdCBsZWF2ZSBpdCANCnRvIGFu IGltcGxpY2l0IHRyYW5zZm9ybWF0aW9uIGp1c3QgaG9waW5nIGV2ZXJ5dGhpbmcgd2lsbCBi ZSBmaW5lLg0KDQo+PiBJdCdzIHRydWUgdGhhdCBwYXNzaW5nL3JldHVybmluZyBpbnQgdG8v ZnJvbSBhIGZ1bmN0aW9uIGV4cGVjdGluZyBmbG9hdA0KPj4gd2lsbCBjYXN0IGJ1dCBjdXJy ZW50bHkgd2l0aCB0aGVzZSByb3VuZGluZyBmdW5jdGlvbnMgaXQncyBhIGRpZmZlcmVudA0K Pj4gZGVhbCBhcyB0aGV5IGV4cGVjdCBhbiBgaW50fGZsb2F0YCBpbnN0ZWFkIG9mIGp1c3Qg YGZsb2F0YC4gU28gaXQncyBub3QNCj4+IGNhc3Qgb24gcGFzc2luZyB0aGUgYXJndW1lbnQg YnV0IHRoZSBmdW5jdGlvbnMgaXRzZWxmIGFyZSBjYXN0aW5nLg0KPj4NCj4+DQo+IFdlbGwg aW50ZXJuYWxseSB5ZWFoIGJ1dCBlZmZlY3RpdmVseSBpdCBpcyBhIGNhc3Qgb24gdGhlIHJl dHVybiB0eXBlLiBXaGF0DQo+IEkgbWVhbnQgaXMgdGhhdCB0aGlzIHdvbnQgaGVscCBldmVy eXdoZXJlIHdoZW4gaXQncyBwYXNzZWQgdG8gZnVuY3Rpb24NCj4gZXhwZWN0aW5nIGp1c3Qg ZmxvYXQgdW5sZXNzIGl0IGlzIGNoYW5nZWQgYnkgdXNlciB0byBhY2NlcHQgaW50fGZsb2F0 Lg0KPg0KPiBXaGVyZSBhbm90aGVyIHNldCBvZiBmdW5jdGlvbnMgd291bGQgYXZvaWQgdGhl IEJDIGJyZWFrIGl0IGFsc28gd291bGQgYmUNCj4+IGFnYWluc3QgaGF2aW5nIFBIUCBhcyBh IGxvb3NlbHkgdHlwZWQgbGFuZ3VhZ2VwdXR0aW5nIHRoZSBidXJkZW4gdG8NCj4+IGV2ZXJ5 b25lIGNhcmluZy4gSSBhbHJlYWR5IHNlZSBodW5kcmVkcyBvZiBgaXNfaW50KCR2KSA/IHJv dW5kX2ludCgkdikgOg0KPj4gcm91bmQoJHYpYCBldmVyeXdoZXJlIGFyb3VuZC4NCj4+DQo+ Pg0KPiBCdXQgZm9yIG1lIGl0J3Mgc29ydCBvZiBhbiBlZGdlIGFzIEkgd291bGQgdGhpbmsg aXQgaXMgbm90IHRoYXQgdXN1YWwNCj4gcm91bmRpbmcgdmFsdWVzIHRoYXQgYXJlIGdyZWF0 ZXIgdGhhbiAyXjUzLiBJIHRoaW5rIGl0IHdvdWxkIGJlIGdvb2QgdG8NCj4gbm90ZSBpbiB0 aGUgUkZDIHdoYXQgb3RoZXIgbGFuZ3VhZ2UgZG8gYWJvdXQgdGhpcyBpc3N1ZS4gSSBxdWlj a2x5IGNoZWNrZWQNCj4gR28gYW5kIGl0IHNlZW1zIHRvIG9ubHkgaGF2ZSBmbG9hdDY0IHJv dW5kaW5nIChNYXRoLlJvdW5kKS4gUnVzdCBzZWVtcyB0bw0KPiBhbHNvIHJvdW5kIGp1c3Qg ZjY0Lg0KDQpBdCBsZWFzdCBweXRob24ncyBidWlsZC1pbiByb3VuZCBmdW5jdGlvbiBrZWVw cyB0aGUgaW5wdXQgdHlwZSwgYXMgbG9uZyANCmFzIG5kaWdpdHMgaXMgZ2l2ZW4sIGVsc2Ug aXQgZXZlbiBnb2VzIGZ1cnRoZXIgYW5kIHJldHVybnMgYW4gaW50Lg0KDQo+IEknbSBzdGFy dGluZyB0byBmZWVsIHRoYXQgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgaW5wdXQgdHlwZSBp cyBkZWZpbmVkIGFzDQo+IGludHxmbG9hdC4gSSB0aGluayB3ZSBzaG91bGQganVzdCBjb3Jy ZWN0IGl0IHRvIGZsb2F0Lg0KDQpXaXRoIHRoZSBjdXJyZW50IGJlaGF2aW9yIC4uLiB5ZXMs IGJ1dCB0aGlzIGRvZXMgbm90IG1ha2UgdGhlc2UgDQpmdW5jdGlvbnMgYW55IGJldHRlci4N Cg0KU3VyZSwgSSdtIHRyeWluZyB0byBpbXByb3ZlIGEgY2FzZSBmb3IgdGhhdCBkb2VzIG5v dCBoYXBwZW4gb2Z0ZW4sIGJ1dCANCml0IGhhcHBlbnMgYXQgbGVhc3QgZm9yIG1lIG9uIHdv cmtpbmcgd2l0aCByZXByZXNlbnRpbmcgc3RhdGlzdGljYWwgZGF0YSANCndoZXJlIHVzaW5n IEdNUC9iY21hdGggLi4uIGRvZXMgbm90IG91dHdlaWdoIGl0J3Mgb3ZlcmhlYWQuIE9uIHRo ZSBzYW1lIA0KdGltZSB0aGUgcmVzdWx0cyBjYW4gYmUgaW1wcm92ZWQgd2l0aG91dCBhZGRp bmcgb3ZlcmhlYWQuDQoNCj4gUmVnYXJkcw0KPg0KPiBKYWt1Yg0KQmVzdCwNCk1hcmMNCg== --------------a5RAUW8pnaj0RNsS0omrxOKK Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Jakub,

On 16.10.23 00:17, Jakub Zelenka wrote= :
Your JSON example is a bit unrelated because if you care about your
types your should have used JSON_RESERVE_ZERO_FRACTION in the first
place else you should not care about int vs float at all.


The thing is that JSON might=
 be encoded by another application that doesn't
care about types that much. In fact in JSON there is no difference betwee=
n
2.0 and 2. So this is quite possible situation IMHO.

That's obviously true but on the same time you should validate and filter your input data. And if you expect a floating point number you need to handle that case explicitly before processing and not leave it to an implicit transformation just hoping everything will be fine.

It's true that passing/ret=
urning int to/from a function expecting float
will cast but currently with these rounding functions it's a different
deal as they expect an `int|float` instead of just `float`. So it's not
cast on passing the argument but the functions itself are casting.


Well internally yeah but eff=
ectively it is a cast on the return type. What
I meant is that this wont help everywhere when it's passed to function
expecting just float unless it is changed by user to accept int|float.

Where another set of functions would avoid the BC break it also would be
against having PHP as a lo=
osely typed languageputting the burden to
everyone caring. I already see hundreds of `is_int($v) ? round_int($v) :
round($v)` everywhere around.


But for me it's sort of an e=
dge as I would think it is not that usual
rounding values that are greater than 2^53. I think it would be good to
note in the RFC what other language do about this issue. I quickly checke=
d
Go and it seems to only have float64 rounding (Math.Round). Rust seems to=

also round just f64.

At least python's build-in round function keeps the input type, as long as ndigits is given, else it even goes further and returns an int.

I'm starting to feel that th=
e problem is that the input type is defined as
int|float. I think we should just correct it to float.

With the current behavior ... yes, but this does not make these functions any better.

Sure, I'm trying to improve a case for that does not happen often, but it happens at least for me on working with representing statistical data where using GMP/bcmath ... does not outweigh it's overhead. On the same time the results can be improved without adding overhead.

Regards

Jakub
Best,
Marc
--------------a5RAUW8pnaj0RNsS0omrxOKK-- --------------HfJqgMAQcgq2ZLODRDQnmqJ1 Content-Type: application/pgp-keys; name="OpenPGP_0x3936ABF753BC88CE.asc" Content-Disposition: attachment; filename="OpenPGP_0x3936ABF753BC88CE.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- xsBNBFby8roBCAD4qHjbk9+V3SmB5DfpkTtX58jYJ9VXVfF54MDoI0fQiYvKyrrg hfO78alHc12RsEZxLH2F5kEfu8WO4wA4apg2gBnRRxqPj7krsct1ySOAdMrRVp8W taeaznpdcn2gJZyAMSI6LTzebT25N77ksvSrUi1BuCKyOa7SmYff3xGgOwYsHQlT 5opMNGPCVegiPmO/K37anwtsgj6L7RVtjXtp2Z3wAs6r3EmO318PL48xDLUgYMvE FAPJglth5FGH2En6n6HFIhxh43LqXQiNeHVjLjS2y8huNBswwc9ZVxk3ip5z/GCm pWnNkgGBOSJ7loJRsq2tOaU6yU8KWb5rhOoFABEBAAHNIU1hcmMgQmVubmV3aXR6 IDxtYXJjQG1hYmUuYmVybGluPsLAeAQTAQIAIgUCVvLyugIbAwYLCQgHAwIGFQgC CQoLBBYCAwECHgECF4AACgkQOTar91O8iM6jzggAwvV6MqU/hcAI6ldpxVjucGz2 J9cAWtva8GL+rm9zvEs7EENtamehJiZob/CTw50WiI/zsJzPblktpT0D2AFBEp9k P5/8CmCpZzxYPsxnLtsFM52fOBpO+aP0PSStBpJjndjBH7HPqKcTCXM3ZM+SL6ly RweAJR7G+JXIZbuUrbjB2lbGx3itNZ6TeXqqnE6KTXNKLEbNHfVdzE4sPDkmuZRo /M2h+gmeS1iQb29WBmhvL6czugCQI9rYl7C4Nci9wPii1lTYyfCWQfQKID4/F2Hi Ov+N/vDMCK1xV8TUeCy8w4X+nYj+wDog046ki9lUM60oPij6WoSJLqfsXr1kNc7A TQRW8vK6AQgAq7QYLB1Dz+8RSi5AGJP1tOFQXtcxyOhNVQZsI1mCQiHay4wteQ+5 m4EOUuR+FrFIlnbSrPdTkKD2wvQDHVqpZivThBpJvara/ick0wi2R3dasu1sPMu1 P6h1EwUsydhviNJB07aLfPAWD6eoqmGTd8236znIIq7mbnNpOnxIQxviTyELUekr Nw38uQtVzR6XZv9PAThA2o1J1JZID7QUpKcNyo9ebYlwxyS+xzhA4DLDqfD6O5sK oKvxEf2fIZeP0ETPpHNYk0WiWnmNoPy8eEY07LriYALVidBwPBcxus0wGoKf8Nun y2aE13SHmj0ioBI1bXMGJx3hEbvzXK6WrwARAQABwsBfBBgBAgAJBQJW8vK6AhsM AAoJEDk2q/dTvIjOkowIAI70P8U4j3eqyK/7x1bnCZZRcpwZ1aH+LR1yMKTINo9N DqlOBWQTLT69YMfV4UN+nTSiD/uLw1fSeLSzBwpoalCMLPVOX/d3Mq5JtL5cKtWU TIVf3Vb7VbN4Rvb8HgWjeSnM1PiG9yQBmLKI68sG/gdgvA/xANdUatkDgG0yj8PC dt+Vy4EblXbIAXZXJ6eRugSKowTjst7iHXKOJxivomHFcmqmkiqjwGTGx/jrhbDt EpPDRk+U9W45D4CbUcyPR6lMSrje5JPGQDv/45M5wPe286YelBjnb0cWRJpA7GZC WDKZOsQ2H6cCRBi8i4m+vfRk7GLA536XnmvWxKFVP9U=3D =3Doi2m -----END PGP PUBLIC KEY BLOCK----- --------------HfJqgMAQcgq2ZLODRDQnmqJ1-- --------------A31juBd9iGYDTmBJ1YsILPHT-- --------------nNivevpEvYZwsT2CjPdgwvjw Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wsB5BAABCAAjFiEENJIbKB0SAX2RmUKbOTar91O8iM4FAmUw2ccFAwAAAAAACgkQOTar91O8iM71 PAgAuIfXeSLpuxH6jcr770jc8Iw3UnjPEfdxmfMj0obD9Yo3Lk2yuEunJTWSVEVisyRhFyI/5GXg z/Rdtpm0JB8wUxjho3h5pNFnmsQ8l49You55xapElH95WcWqfcIV5GYZ1ANfuumnCrlaF1y2qF14 wy+3YHVjdLSpaLKayYuCZ6g9lcfy2e3INGhMRYOFnxlXKmInxSUrbE5+DjQ/esKerdsyrc0Hzspq +ys9thVVHFeCFFj8V3HOsQ6GPJd3v7SLeRiux/Do17bk6ZUC78VmDiZ4ONGSEHb30QVQYrx/wxS9 VQb7paVfKIVXMLHd91v28uelsnIKm7PIgmGRy7CDCw== =NCT6 -----END PGP SIGNATURE----- --------------nNivevpEvYZwsT2CjPdgwvjw--