亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
1. 理解除以零的結(jié)果:何時(shí)產(chǎn)生 Infinity 或 NaN
2. 正確識(shí)別和處理 NaN
3. Infinity 的影響與處理
總結(jié)關(guān)鍵實(shí)踐
首頁(yè) 后端開(kāi)發(fā) php教程 處理數(shù)字邊緣案例:NAN,Infinity和Difient乘零

處理數(shù)字邊緣案例:NAN,Infinity和Difient乘零

Jul 29, 2025 am 03:46 AM
PHP Numbers

除以零在浮點(diǎn)運(yùn)算中遵循IEEE 754標(biāo)準(zhǔn),正數(shù)除以零得Infinity,負(fù)數(shù)除以零得-Infinity,零除以零得NaN;2. NaN表示無(wú)效數(shù)值操作,不可用==判斷,應(yīng)使用math.isnan()或Number.isNaN()等專用函數(shù)識(shí)別;3. Infinity雖合法但可能指示錯(cuò)誤,需通過(guò)isFinite()檢查并進(jìn)行格式化或降級(jí)處理;4. 建議在除法前檢查分母是否為零,數(shù)據(jù)輸入輸出時(shí)清洗異常值,日志記錄異常位置以提升代碼健壯性,完整實(shí)踐可有效避免因NaN或Infinity導(dǎo)致的隱蔽錯(cuò)誤。

Handling Numeric Edge Cases: NaN, Infinity, and Division by Zero

在處理數(shù)值計(jì)算時(shí),像 NaN(Not a Number)、Infinity 和除以零這類(lèi)邊緣情況(edge cases)經(jīng)常被忽視,但它們可能導(dǎo)致程序出現(xiàn)難以追蹤的錯(cuò)誤或不一致的行為。正確理解和處理這些特殊情況,是編寫(xiě)健壯數(shù)值代碼的關(guān)鍵。

Handling Numeric Edge Cases: NaN, Infinity, and Division by Zero

1. 理解除以零的結(jié)果:何時(shí)產(chǎn)生 Infinity 或 NaN

在大多數(shù)編程語(yǔ)言(如 JavaScript、Python、Java 等)中,浮點(diǎn)數(shù)的除以零行為遵循 IEEE 754 標(biāo)準(zhǔn):

  • 正數(shù)除以零 → Infinity
  • 負(fù)數(shù)除以零 → -Infinity
  • 零除以零 → NaN

例如在 JavaScript 中:

Handling Numeric Edge Cases: NaN, Infinity, and Division by Zero
console.log(1 / 0);       // Infinity
console.log(-1 / 0);      // -Infinity
console.log(0 / 0);       // NaN

在 Python 中使用浮點(diǎn)數(shù)也有類(lèi)似行為:

print(1.0 / 0.0)   # 會(huì)引發(fā) ZeroDivisionError?不!僅整數(shù)除法會(huì)報(bào)錯(cuò)
# 實(shí)際上,浮點(diǎn)除以零會(huì)報(bào)錯(cuò),除非使用 math 模塊或特殊方式
import math
print(math.inf)     # 可以直接使用無(wú)窮大

?? 注意:Python 的 1.0 / 0.0 會(huì)拋出 ZeroDivisionError,但你可以通過(guò) float('inf')math.inf 顯式創(chuàng)建無(wú)窮大。

Handling Numeric Edge Cases: NaN, Infinity, and Division by Zero

建議

  • 在做除法前檢查分母是否為零,尤其是用戶輸入或動(dòng)態(tài)計(jì)算的值。
  • 如果允許無(wú)窮大有意義(如極限計(jì)算),應(yīng)明確處理 Infinity 場(chǎng)景。
def safe_divide(a, b):
    if b == 0:
        return float('inf') if a > 0 else float('-inf') if a < 0 else float('nan')
    return a / b

2. 正確識(shí)別和處理 NaN

NaN 是一個(gè)特殊的浮點(diǎn)值,表示“無(wú)效數(shù)值操作”的結(jié)果,比如 0/0sqrt(-1)(在實(shí)數(shù)范圍內(nèi))、inf - inf 等。

關(guān)鍵特性:

  • NaN 與任何值(包括它自己)比較都返回 False
  • 即:NaN == NaNFalse
  • 所以不能用 == 判斷是否為 NaN

? 正確判斷方式:

  • JavaScript: isNaN(value) 或更安全的 Number.isNaN()
  • Python: math.isnan(x)
  • Java: Double.isNaN(x)

示例(Python):

import math

x = 0.0 / 0.0  # 實(shí)際上 Python 會(huì)報(bào)錯(cuò),改用:
x = float('nan')

print(x != x)        # True!這是判斷 NaN 的一種“黑科技”
print(math.isnan(x)) # 推薦方式,清晰安全

常見(jiàn)陷阱

  • 在數(shù)據(jù)處理中(如 Pandas),NaN 會(huì)導(dǎo)致聚合函數(shù)跳過(guò)或返回 NaN
  • 機(jī)器學(xué)習(xí)中未處理的 NaN 會(huì)傳播,導(dǎo)致模型訓(xùn)練失敗

建議

  • 在數(shù)據(jù)清洗階段主動(dòng)檢查并處理 NaN
  • 使用 pandas.dropna()fillna() 處理缺失值
  • 避免將 NaN 用于控制流判斷(如 if x == nan:

3. Infinity 的影響與處理

Infinity 雖然合法,但在某些場(chǎng)景下可能是錯(cuò)誤信號(hào):

  • 表示數(shù)值溢出或除以零
  • 在數(shù)據(jù)庫(kù)中可能不被支持
  • 在 UI 中顯示為 "Infinity" 很不友好

示例問(wèn)題:

const score = 100 / 0; // Infinity
console.log(`得分:${score}`); // 輸出 "得分:Infinity" —— 用戶困惑

處理建議

  • 對(duì)關(guān)鍵業(yè)務(wù)數(shù)值設(shè)置上下界檢查
  • Infinity 轉(zhuǎn)換為有意義的默認(rèn)值或錯(cuò)誤提示
function formatScore(value) {
    if (!isFinite(value)) {
        return '數(shù)據(jù)異常';
    }
    return value.toFixed(2);
}

在 Python 中使用 math.isfinite()

import math

if math.isfinite(result):
    print(result)
else:
    print("結(jié)果超出范圍")

總結(jié)關(guān)鍵實(shí)踐

處理這些數(shù)值邊緣情況,核心是 提前預(yù)防 顯式檢查 合理降級(jí)

  • ? 使用 isFinite() 檢查值是否正常
  • ? 用 isNaN() 而不是 == 判斷 NaN
  • ? 除法前檢查分母是否為零(特別是浮點(diǎn)數(shù)接近零的情況)
  • ? 在數(shù)據(jù)輸入/輸出層做清洗和格式化
  • ? 日志中記錄 InfinityNaN 出現(xiàn)的位置,便于調(diào)試

基本上就這些??此坪?jiǎn)單,但在真實(shí)項(xiàng)目中,一個(gè)未處理的 NaN 可能讓你調(diào)試一整天。

以上是處理數(shù)字邊緣案例:NAN,Infinity和Difient乘零的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Laravel 教程
1597
29
PHP教程
1488
72
國(guó)際化和可讀性的高級(jí)數(shù)字格式 國(guó)際化和可讀性的高級(jí)數(shù)字格式 Jul 27, 2025 am 04:32 AM

UseIntl.NumberFormatwithuser-specificlocalesforcorrectdigitgroupinganddecimalseparators.2.Formatcurrencyusingstyle:'currency'withISO4217codesandlocale-specificsymbolplacement.3.ApplycompactnotationforlargenumberstoenhancereadabilitywithunitslikeMor??

精確事項(xiàng):PHP的BCMATH擴(kuò)展的財(cái)務(wù)計(jì)算 精確事項(xiàng):PHP的BCMATH擴(kuò)展的財(cái)務(wù)計(jì)算 Jul 26, 2025 am 09:43 AM

使用BCMath擴(kuò)展是解決PHP金融計(jì)算精度問(wèn)題的關(guān)鍵,因?yàn)樗ㄟ^(guò)字符串進(jìn)行任意精度的十進(jìn)制運(yùn)算,避免了浮點(diǎn)數(shù)的舍入誤差;2.必須始終以字符串形式傳入數(shù)值并設(shè)置scale參數(shù)(如bcadd('0.1','0.2',2)),以確保結(jié)果精確到所需的小數(shù)位;3.避免將浮點(diǎn)數(shù)直接傳給BCMath函數(shù),因其在傳參前已丟失精度;4.可通過(guò)bcscale(2)設(shè)置全局小數(shù)位數(shù),確保財(cái)務(wù)計(jì)算統(tǒng)一保留兩位小數(shù);5.BCMath默認(rèn)截?cái)喽撬纳嵛迦?,需自行?shí)現(xiàn)四舍五入邏輯(如通過(guò)bcround函數(shù));6.輸入值需驗(yàn)

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字 從`mt_rand`到`random_int`:生成密碼固定的數(shù)字 Jul 28, 2025 am 04:42 AM

mt_rand()isNotsecureCryptographicposePoseSitusEsthemerSennetWisterAlgorithm,whtroducesProdiCesProdiCtableOutput,Maybepoorlyseeded,andisnotdesignedforsecurity.2.2.forsecurererandomnumnumnumnumnumnumnumnumnumnumnumnumnumnumbergeneration,UsserandSty,inserandsyterstranseftsfors

PHP的數(shù)字類(lèi)型雜耍和脅迫的危險(xiǎn)和力量 PHP的數(shù)字類(lèi)型雜耍和脅迫的危險(xiǎn)和力量 Jul 26, 2025 am 09:38 AM

PHP的松散類(lèi)型系統(tǒng)在數(shù)字類(lèi)型轉(zhuǎn)換中既強(qiáng)大又危險(xiǎn)。1.使用松散比較(==)時(shí),PHP會(huì)將非數(shù)字字符串轉(zhuǎn)為0,導(dǎo)致'hello'==0為true,可能引發(fā)安全漏洞,應(yīng)始終在需要時(shí)使用嚴(yán)格比較(===)。2.算術(shù)運(yùn)算中,PHP會(huì)靜默轉(zhuǎn)換字符串,如'10apples'變?yōu)?0,而'apples10'變?yōu)?,可能導(dǎo)致計(jì)算錯(cuò)誤,應(yīng)使用is_numeric()或filter_var()驗(yàn)證輸入。3.數(shù)組鍵中,數(shù)字字符串如'123'會(huì)被轉(zhuǎn)為整數(shù),導(dǎo)致'007'變?yōu)?,丟失格式,可通過(guò)添加前綴避免。4.函數(shù)參數(shù)

超越php_int_max:用GMP和BIGINT處理大整數(shù) 超越php_int_max:用GMP和BIGINT處理大整數(shù) Jul 27, 2025 am 04:24 AM

當(dāng)需要處理超過(guò)PHP_INT_MAX(如9223372036854775807)的整數(shù)時(shí),1.應(yīng)使用GMP擴(kuò)展或brick/math等任意精度數(shù)學(xué)庫(kù);2.GMP基于C庫(kù),性能高但需服務(wù)器支持;3.brick/math為純PHP實(shí)現(xiàn),便于移植但速度較慢;4.初始化大數(shù)時(shí)必須用字符串防止精度丟失;5.所有操作應(yīng)避免浮點(diǎn)數(shù)參與以確保精度。最終選擇取決于環(huán)境控制程度、性能需求與代碼風(fēng)格偏好,但都需以字符串方式安全初始化大整數(shù)。

強(qiáng)大的數(shù)字驗(yàn)證:`is_numeric()`vs.` filter_var() 強(qiáng)大的數(shù)字驗(yàn)證:`is_numeric()`vs.` filter_var() Jul 28, 2025 am 04:39 AM

is_numeric()checksifavaluecanbeinterpretedasanumber,acceptingformatslikehex,scientificnotation,andwhitespace,butonlyreturnsabooleanwithouttypecasting.2.filter_var()withFILTER_VALIDATE_INTorFILTER_VALIDATE_FLOATvalidatesandsanitizesbyreturningtheactua

在PHP應(yīng)用中揭開(kāi)浮點(diǎn)數(shù)不準(zhǔn)確的神秘面紗 在PHP應(yīng)用中揭開(kāi)浮點(diǎn)數(shù)不準(zhǔn)確的神秘面紗 Jul 26, 2025 am 09:41 AM

浮點(diǎn)數(shù)不準(zhǔn)確的問(wèn)題在PHP中常見(jiàn),尤其是在金融計(jì)算或精確比較時(shí),根本原因是十進(jìn)制小數(shù)無(wú)法在二進(jìn)制浮點(diǎn)表示法(IEEE754標(biāo)準(zhǔn))中精確存儲(chǔ),導(dǎo)致如0.1 0.2≠0.3的結(jié)果;1.進(jìn)行浮點(diǎn)數(shù)相等比較時(shí)應(yīng)使用容差值(epsilon)而非直接用==;2.金融計(jì)算應(yīng)避免使用浮點(diǎn)數(shù),改用整數(shù)(如以分為單位)或BCMath擴(kuò)展;3.BCMath通過(guò)字符串進(jìn)行任意精度計(jì)算,適用于高精度場(chǎng)景,但性能較低;4.應(yīng)注意PHP的類(lèi)型轉(zhuǎn)換可能將字符串或整數(shù)隱式轉(zhuǎn)為浮點(diǎn)數(shù)引入誤差;總之,浮點(diǎn)數(shù)不精確是通用計(jì)算問(wèn)題,但在

整數(shù)劃分深度潛水:了解``intdiv() 整數(shù)劃分深度潛水:了解``intdiv() Jul 27, 2025 am 12:19 AM

intdiv()performstrueintegerdivisionandissaferforwholenumbers,whilecasting(int)afterdivisionrisksfloating-pointprecisionerrors.2.Bothtruncatetowardzero,butcastingcanyieldincorrectresultswithnegativeorimprecisevaluesduetofloatrepresentationissues.3.int

See all articles