php 浮點數取餘的方法

來源:互聯網
上載者:User
浮點型(也叫浮點數 float,雙精確度數 double 或實數 real。浮點數的字長和平台相關,儘管通常最大值是 1.8e308 並具有 14 位十進位數位精度(64 位元 IEEE 格式)。

浮點數的精度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精確度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。

此外,以十進位能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二進位精確表示,因此不能在不丟失一點點精度的情況下轉換為二進位的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999999991118...。

所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。

本文執行個體講述了php 浮點數取餘的方法。分享給大家供大家參考,具體如下:

一般我們進行取餘運算第一個想到的就是用百分比符號%,但當除數是個很大的數值,超出了int範圍時,這樣取餘就不準確了。

php大數(浮點數)取餘函數:

/** * php大數取餘 * * @param int or float $bn 除數 * @param int $sn 被除數 * @return int 餘數 *///大數(浮點數)取餘方法function Kmod($bn, $sn) {  return intval(fmod(floatval($bn), $sn));}

測試代碼:

//大數(浮點數)取餘方法function Kmod($bn, $sn) {  return intval(fmod(floatval($bn), $sn));}//整數取餘方法function mod($bn, $sn) {  return $bn%$sn;}//最大的int整數$bn = PHP_INT_MAX;$sn = 11;var_dump($bn);var_dump(Kmod($bn, $sn));var_dump(mod($bn, $sn));//給最大的int整數加1$bn = PHP_INT_MAX + 1;var_dump($bn);var_dump(Kmod($bn, $sn));var_dump(mod($bn, $sn));

執行結果:

int 2147483647int 1int 1float 2147483648int 2int -2
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.