2024 年 PHP Conference Japan

數學函式

目錄

  • abs — 絕對值
  • acos — 反餘弦
  • acosh — 反雙曲餘弦
  • asin — 反正弦
  • asinh — 反雙曲正弦
  • atan — 反正切
  • atan2 — 兩個變數的反正切
  • atanh — 反雙曲正切
  • base_convert — 在任意進位之間轉換數字
  • bindec — 二進位轉十進位
  • ceil — 無條件進位
  • cos — 餘弦
  • cosh — 雙曲餘弦
  • decbin — 十進位轉二進位
  • dechex — 十進位轉十六進位
  • decoct — 十進位轉八進位
  • deg2rad — 將度數轉換為弧度
  • exp — 計算 e 的指數
  • expm1 — 傳回 exp($num) - 1,即使數值接近零也能精確計算
  • fdiv — 根據 IEEE 754 標準除兩個數
  • floor — 向下取整
  • fmod — 傳回兩個參數相除的浮點餘數(模數)
  • fpow — 根據 IEEE 754 標準計算一個數的次方
  • hexdec — 十六進位轉十進位
  • hypot — 計算直角三角形斜邊的長度
  • intdiv — 整數除法
  • is_finite — 檢查浮點數是否為有限數
  • is_infinite — 檢查浮點數是否為無限大
  • is_nan — 檢查浮點數是否為 NAN(非數值)
  • log — 自然對數
  • log10 — 以 10 為底的對數
  • log1p — 傳回 log(1 + number),即使數值接近零也能精確計算
  • max — 尋找最大值
  • min — 尋找最小值
  • octdec — 八進位轉十進位
  • pi — 取得圓周率值
  • pow — 指數運算
  • rad2deg — 將弧度轉換為度數
  • round — 四捨五入浮點數
  • sin — 正弦
  • sinh — 雙曲正弦
  • sqrt — 平方根
  • tan — 正切
  • tanh — 雙曲正切
新增註記

使用者貢獻的註記 4 則註記

pat.mat AT sympatico DOT com
20 年前
對於對微分方程式感興趣的人,我寫了一個函式,它接收像 x^2+x^3 這樣的字串,並將其轉換為
2x+3x^2,這是前一個方程式的微分式。

程式碼中缺少一樣東西:$string{$i} 經常超出範圍(未初始化的字串偏移量:6 in...)
如果您的錯誤設定過高... 我只是不知道如何解決這個問題。

所以這裡是僅包含 (+ 和 -) 的微分方程式程式碼

<?
function differentiel($equa)
{
$equa = strtolower($equa);
echo "起始方程式: ".$equa."<br>";
$final = "";

for($i = 0; $i < strlen($equa); $i++)
{
//從接收到的 $equa 建立一個新的字串
if($equa{$i} == "x" && $equa{$i+1} == "^")
{
$final .= $equa{$i+2};
$final .= "x^";
$final .= $equa{$i+2}-1;
}
elseif($equa{$i} == "+" || $equa{$i} == "-")
{
$final .= $equa{$i};
}
elseif(is_numeric($equa{$i}) && $i == 0)
{
//處理括號和其他一般項,以及處理後面的 ^:例如 2^2
$final .= $equa{$i}."*";
}
elseif(is_numeric($equa{$i}) && $i > 0 && $equa{$i-1} != "^")
{
//處理後面的 ^:例如 2^2
$final .= $equa{$i}."*";
}
elseif($equa{$i} == "^")
{
continue;
}
elseif(is_numeric($equa{$i}) && $equa{$i-1} == "^")
{
continue;
}
else
{
if($equa{$i} == "x")
{
$final .= 1;
}
else
{
$final .= $equa{$i};
}
}
}
//
//在之前的字串 $final 中加入乘法運算
//
$finalMul = "";
for($i = 0; $i < strlen($final); $i++)
{
if(is_numeric($final{$i}) && $final{$i+1} == "*" && is_numeric($final{$i+2}))
{
$finalMul .= $final{$i}*$final{$i+2};
}
elseif($final{$i} == "*")
{
continue;
}
elseif(is_numeric($final{$i}) && $final{$i+1} != "*" && $final{$i-1} == "*")
{
continue;
}
else
{
$finalMul .= $final{$i};
}
}
echo "最終方程式:".$finalMul;
}
?>

我知道這不是最佳解,但我很快地完成了 :)
如果您有任何意見,請發送電子郵件給我。
我也想用 C 語言實現這個函式,或許很快就能加到 phpCore 中...
Patoff
daniel at g-loc dot org
19 年前
如果你是飛行員,需要計算風修正角和地速(例如在飛行計劃期間),這會非常有用。

$windcorrection = rad2deg(asin((($windspeed * (sin(deg2rad($tt - ($winddirection-180))))/$tas))));
$groundspeed = $tas*cos(deg2rad($windcorrection)) + $windspeed*cos(deg2rad($tt-($winddirection-180)));

你可以把這些程式碼寫得更漂亮,但它們可以運作!
lummox
16 年前
以下函式是否可以達到相同的效果,而且比前一個註釋中的函式更容易理解?

function trimInteger($targetNumber,$newLength) {
return $targetNumber%pow(10,$newLength);
}
info at gavinvincent dot co dot uk
20 年前
如果你需要處理極座標,在大多數情況下,你需要在輸入和輸出時進行 x,y 與極座標之間的轉換:以下是一些用於笛卡爾座標轉極座標和極座標轉笛卡爾座標的函式
<?
//返回 r, theta 的陣列,範圍為 0-2*pi(以弧度為單位)
function rect2polar($x,$y)
{
if(is_numeric($x)&&is_numeric($y))
{
$r=sqrt(pow($x,2)+pow($y,2));
if($x==0)
{
if($y>0) $theta=pi()/2;
else $theta=3*pi()/2;
}
else if($x<0) $theta=atan($y/$x)+pi();
else if($y<0) $theta=atan($y/$x)+2*pi();
else $theta=atan($y/$x);
$polar=array("r"=>$r,"theta"=>$theta);
return $polar;
}
else return false;
}

//r 必須以弧度為單位,返回 x,y 的陣列
function polar2rect($r,$theta)
{
if(is_numeric($r)&&is_numeric($theta))
{
$x=$r*cos($theta);
$y=$r*sin($theta);
$rect=array("x"=>$x,"y"=>$y);
}
else
{
return false;
}
}
?>
To Top