我正在将项目升级到PHP8.1版本。这两个函数都面临警告,导致性能低下。第一项职能:
/**
* @param $a
* @param $b
* @return float
*/
public static function div($a, $b)
{
return (int) ~~($a / $b);
}第二项职能:
/**
* @param $a
* @param $b
* @return mixed
*/
public static function mod($a, $b)
{
return (int) $a - ~~($a / $b) * $b;
}我的警告:
Implicit conversion from float 1.0833333333333333 to int loses precision该样本使用了以下功能:
public static function d2g($jdn)
{
$j = 4 * $jdn + 139361631;
$j += self::div(self::div(4 * $jdn + 183187720, 146097) * 3, 4) * 4 - 3908;
$i = self::div(self::mod($j, 1461), 4) * 5 + 308;
$gd = self::div(self::mod($i, 153), 5) + 1;
$gm = self::mod(self::div($i, 153), 12) + 1;
$gy = self::div($j, 1461) - 100100 + self::div(8 - $gm, 6);
return [$gy, $gm, $gd];
}发布于 2022-04-05 13:29:33
警告非常清楚:将浮点数转换为整数会导致精度下降。由于此转换是通过应用~运算符隐式进行的,因此您将得到以下警告。
我建议对第一个函数使用本机intdiv函数,对第二个函数使用%操作符。
https://stackoverflow.com/questions/71752396
复制相似问题