當前位置: 首頁> 最新文章列表> PHP 的sqrt 函數如何正確處理0 和負數?

PHP 的sqrt 函數如何正確處理0 和負數?

gitbox 2025-09-11

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 這裡是文章前的無關PHP代碼示例</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dummyFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"這段代碼與文章內容無關。"</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">dummyFunction</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在PHP 中,平方根函數sqrt()用於計算一個數的平方根。它的使用方法非常簡單,但在處理特殊值(如0 或負數)時,需要理解其行為和潛在問題,以避免運行時錯誤或意外結果。

1. 對0 的處理

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$number</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">sqrt</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// 輸出 0</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在PHP 中, sqrt(0)會返回0 。這完全符合數學邏輯,因為0 的平方根就是0。這種情況是安全的,不會產生警告或錯誤。

2. 對負數的處理

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$number</span></span><span> = -</span><span><span class="hljs-number">4</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">sqrt</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

嘗試對負數使用sqrt()會導致一個PHP 警告

 <span><span><span class="hljs-built_in">Warning</span></span><span>: sqrt() expects parameter </span><span><span class="hljs-number">1</span></span><span> </span><span><span class="hljs-keyword">to</span></span><span> be </span><span><span class="hljs-type">float</span></span><span>, negative given
</span></span>

並且返回NaN(Not a Number) 。這是因為在實數範圍內,負數沒有平方根。如果需要處理負數的平方根,需要引入複數的概念。

使用complex類庫處理複數

PHP 自帶的sqrt()無法直接處理複數,但可以通過一些擴展或自定義函數實現:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">sqrtComplex</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$number</span></span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$number</span></span><span> &gt;= </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">sqrt</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>);
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">sqrt</span></span><span>(</span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>)) . </span><span><span class="hljs-string">'i'</span></span><span>;
    }
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">sqrtComplex</span></span><span>(-</span><span><span class="hljs-number">9</span></span><span>); </span><span><span class="hljs-comment">// 輸出 3i</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

這裡我們將負數平方根表示為虛數形式,其中i表示虛數單位。

3. 安全使用建議

  1. 檢查輸入值:在調用sqrt()前先判斷是否為負數,以避免警告。

  2. 處理0 :0 是安全的,直接計算即可。

  3. 考慮複數情況:如果程序需要處理負數平方根,可以用自定義函數或第三方庫表示複數。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$number</span></span><span> = -</span><span><span class="hljs-number">16</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$number</span></span><span> &lt; </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"平方根為虛數: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">sqrtComplex</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"平方根為實數: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">sqrt</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>);
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

這樣可以保證程序不會因為負數輸入而出現警告或錯誤,同時正確返回結果。