>백엔드 개발 >PHP 튜토리얼 >PHP 부동 소수점 수 나머지 방법

PHP 부동 소수점 수 나머지 방법

怪我咯
怪我咯원래의
2017-07-11 14:05:174353검색

부동 소수점 유형(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 2147483647
int 1
int 1
float 2147483648
int 2
int -2

위 내용은 PHP 부동 소수점 수 나머지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.