လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> is_nan နှင့် php အကြားကိန်းဂဏန်းအမှားများကို floating floating bug များကိုဖြေရှင်းပါ

is_nan နှင့် php အကြားကိန်းဂဏန်းအမှားများကို floating floating bug များကိုဖြေရှင်းပါ

gitbox 2025-05-27

Floating Numerical Error သည် PHP ကိုကိန်းဂဏန်းတွက်ချက်မှုများအတွက်အသုံးပြုသောအခါပြ problem နာဖြစ်သည်။ အထူးသဖြင့်ရေပေါ်တန်ဖိုးများကိုကျွန်ုပ်တို့ကိုင်တွယ်သောအခါခက်ခဲသောအမှားအယွင်းများကိုကျွန်ုပ်တို့ကြုံတွေ့ရနိုင်သည်။ အသုံးများသောအမှားများအနက်မှတစ်ခုမှာ is_nan () function ကိုရရှိသောရလဒ်မှာမျှော်လင့်ထားသည့်အတိုင်းမဟုတ်ပါ။ ဤအခြေအနေသည်များသောအားဖြင့်ကိန်းဂဏန်းအမှားများကို floating လုပ်ခြင်းကြောင့်ဖြစ်ရခြင်းနှင့်ဤပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်ကိုလေ့လာပြီးဤအမှားကိုရှောင်ရှားရန်သို့မဟုတ်ဖြေရှင်းရန်နည်းလမ်းများပေးလိမ့်မည်။

1 ။ is_nan function ကိုနားလည်ပါ

IS_NAN သည် PHP တွင် variable တစ်ခု၏ "Non-Non-Non မဟုတ်သည့်နံပါတ်မဟုတ်, နံပါတ်မဟုတ်) တန်ဖိုးကိုရှာဖွေရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ Nan တန်ဖိုးများသည်များသောအားဖြင့်ကိန်းဂဏန်းတွက်ချက်မှုများကိုမျောနေစဉ်အတွင်းဖြစ်ပွားသောပြင်ပမှများဖြစ်သည်။ ဥပမာအားဖြင့်, သင်သည်မတတ်နိုင်သောသင်္ချာဆိုင်ရာစစ်ဆင်ရေးတစ်ခုကိုပြောင်းလဲရန်ကြိုးစားသောအခါနန်ကိုသင်ရနိုင်သည်။ ဥပမာအားဖြင့် 0 0/0 သို့မဟုတ် sqrt (-1) ကဲ့သို့သောမမှန်ကန်သောသင်္ချာဆိုင်ရာစစ်ဆင်ရေးများသည်ရလဒ် Nan ဖြစ်သည်။

 <?php
$val = 0 / 0;  // ဒါ NaN
if (is_nan($val)) {
    echo "The value is NaN.";
}
?>

2 ။ numerical အမှားနှင့်နန်ကို floating

floating numeratical အမှားများကိုများသောအားဖြင့်အချို့သောဒ decimal မတန်ဖိုးများကိုတိကျစွာကိုယ်စားပြုနိုင်ခြင်းမရှိသောကွန်ပျူတာများကြောင့်ဖြစ်သည်။ floating တန်ဖိုးများကိုကိုင်တွယ်ရာတွင်အချို့သောတန်ဖိုးများသည် Binary floating point ကိုယ်စားပြုမှုများကန့်သတ်ချက်များကြောင့်မျှော်လင့်ထားသည့်တန်ဖိုးနှင့်အလွန်နီးကပ်စွာဖြစ်နိုင်သည်။ ဥပမာအားဖြင့်:

 <?php
$val1 = 0.1 + 0.2;
$val2 = 0.3;
if ($val1 == $val2) {
    echo "Equal!";
} else {
    echo "Not equal!";
}
?>

0.1 + 0.2 ၏သင်္ချာဆိုင်ရာရလဒ်မှာ 0.3 နှင့်ညီမျှသင့်သည်, ကွန်ပျူတာ၏ floating point ကိုယ်စားပြုမှုတွင်သူတို့သည်အမှန်တကယ်ကွဲပြားခြားနားပြီးနှိုင်းယှဉ်မှုကိုပျက်ကွက်စေနိုင်သည်။

3 ။ is_nan နှင့် floating numerical အမှားအယွင်းများအကြားဆက်နွယ်မှု

IS_NAN () function သည်တန်ဖိုးတစ်ခုဖြစ်သည်ဖြစ်စေရှာဖွေတွေ့ရှိသည်။ သို့သော်ရေပေါ်တန်ဖိုးများကိုကိုယ်စားပြုမှုသည်တိကျမှန်ကန်မှုရှိမရှိ, အချို့တွက်ချက်မှုများ၌အချို့သောတန်ဖိုးများကိုနန်လန်းအတွင်း၌ရှိသောနန်နန်နိုင်ငံနှင့်နီးစပ်သောအရာဖြစ်သည်။ ဥပမာအားဖြင့်, အစီအစဉ်သည်မူလကတရားဝင်တန်ဖိုးကိုနန်တစ်ခုဖြစ်ရန်စဉ်းစားနိုင်သည်။

4 ။ ဖြေရှင်းနည်း - Nan ကို Misjudgment ကိုရှောင်ရှားပါ

is_nan () function ကိုရှောင်ရှားခြင်းမှရှောင်ရှားရန်အောက်ပါနည်းလမ်းများကိုအောက်ပါနည်းလမ်းများကိုအသုံးပြုနိုင်သည်။

နည်းလမ်း 1: is_finite () function ကိုသုံးပါ

PHP တွင် IS_FINITITITITITITITITITITITE () function ကို floating တန်ဖိုးသည်အကန့်အသတ်ရှိသောတန်ဖိုးကိုရှာဖွေရန်အသုံးပြုသည်။ အကယ်. တန်ဖိုးသည်အဆုံးမဲ့ (အပြုသဘောဆောင် / အပျက်သဘောဆောင်သောအသင်္ချေ) သို့မဟုတ် Nan. is_finite () သည် လွဲမှားသောက နင်တရားစီရင်ခြင်းနှင့်သက်ဆိုင်သောပြ problems နာများကိုရှောင်ရှားနိုင်ပါက,

 <?php
$val = 0.1 + 0.2;
if (!is_finite($val)) {
    echo "The value is not a valid finite number.";
}
?>

နည်းလမ်း 2 - floating တန်ဖိုးများအတွက်သည်းခံစိတ်ကိုသတ်မှတ်ပါ

Floating တန်ဖိုးများကိုကိုယ်စားပြုမှုအမှားများကြောင့်ရေပေါ်တန်ဖိုးနှစ်ခုကိုတိုက်ရိုက်နှိုင်းယှဉ်ခြင်းကအမှားအယွင်းများဖြစ်ပေါ်စေနိုင်သည်။ သည်းခံနိုင်မှု (Epsilon) ကိုသတ်မှတ်နိုင်ပြီးတန်ဖိုးနှစ်ခုအကြားခြားနားချက်သည်သည်းခံခြင်းထက်နည်းသည်။

 <?php
$val1 = 0.1 + 0.2;
$val2 = 0.3;
$epsilon = 0.0000001; // သည်းခံစိတ်
if (abs($val1 - $val2) < $epsilon) {
    echo "The values are approximately equal.";
} else {
    echo "The values are not equal.";
}
?>

နည်းလမ်း 3- floating numerical အမှားအယွင်းများကိုကိုင်တွယ်ရန်စာကြည့်တိုက်ကိုသုံးပါ

အချို့သောစာကြည့်တိုက်များ ( BCMATS သို့မဟုတ် GMP ကဲ့သို့သောစာကြည့်တိုက်များ) သည်ပိုမိုမြင့်မားသောတိကျသောကိန်းဂဏန်းတွက်ချက်မှုများကိုပိုမိုမြင့်မားစေပြီး floating numerical အမှားများကိုရှောင်ရှားနိုင်သည်။ အကယ်. သင်၏လျှောက်လွှာသည်မြင့်မားသော - တိကျစွာရေပေါ်ကိန်းဂဏန်းများကိုကိုင်တွယ်ရန်လိုအပ်ပါကဤစာကြည့်တိုက်များကိုအသုံးပြုခြင်းသည်အထောက်အကူဖြစ်နိုင်သည်။

 <?php
$val1 = bcmul('0.1', '3', 10); // မြင့်မားသောတိကျတဲ့တွက်ချက်မှု
$val2 = '0.3';
if (bccomp($val1, $val2, 10) === 0) {
    echo "The values are approximately equal.";
} else {
    echo "The values are not equal.";
}
?>

နည်းလမ်း 4 - filter_var ကို သုံး. Nan ကို detect လုပ်ပါ

နောက်နည်းတစ်နည်းမှာ filter_var () function ကိုအသုံးပြုရန်ဖြစ်သည်။ ဤနည်းလမ်းသည်၎င်းကိုနန်တန်ဖိုးများကိုကိုယ်တိုင်နှိုင်းယှဉ်။ အမှားအယွင်းများကိုရှောင်ရှားရန်ကူညီနိုင်သည်။

 <?php
$val = 0/0; // NaN
if (!filter_var($val, FILTER_VALIDATE_FLOAT)) {
    echo "The value is NaN.";
}
?>

5 ။ အကျဉ်းချုပ်

PHP တွင် floating values ​​နှင့်ဆက်ဆံရာတွင် IS_NAN function သည် floating တန်ဖိုးများအမှားအယွင်းများကြောင့်ပြ problems နာအချို့ကိုဖြစ်ပေါ်စေနိုင်သည်။ ဤအရာကိုရှောင်ရှားရန်သင်သည် is_finite () , BCMath နှင့်အခြားစာကြည့်တိုက်များကဲ့သို့သောအခြားလုပ်ဆောင်မှုများသို့မဟုတ်နည်းလမ်းများကိုသုံးနိုင်သည်။ မြင့်မားသောတိကျစွာတွက်ချက်မှုများရှိသောအခြေအနေများတွင်အမှားအယွင်းများကိုရှောင်ရှားရန်အထူးကိန်းဂဏန်းစာကြည့်တိုက်ကိုအသုံးပြုရန်အကြံပြုသည်။

ဤနည်းလမ်းများမှတစ်ဆင့်သင်ကိန်းဂဏန်းအမှားများကို floating floating is_nan function ပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။