កំហុសបង្គត់កំឡុងពេលផ្លាស់ប្តូរ

នៅទីក្រុងបាវ៉ារៀ និទ្ទេស A ជាមធ្យម \(2{,}33\) បញ្ជាក់ពីភាពស័ក្តិសមសម្រាប់កន្លែងហាត់ប្រាណ \(2{,}34\) មិនស័ក្តិសមទេ។ នៅពេលកាត់ផ្តាច់យ៉ាងមុតស្រួចនេះ លំដាប់នៃប្រតិបត្តិការបង្គត់ពីរអាចកំណត់ថាកុមារធ្លាក់ទៅខាងណា។ Günther Felbinger ពិភាក្សាអំពីផលវិបាកដែលអាចកើតមាននៃឥទ្ធិពលបង្គត់នេះនៅក្នុងប្លក់មួយ ។ ដោយសារចំណាប់អារម្មណ៍សុទ្ធសាធ ខ្ញុំបានគណនាផលប៉ះពាល់ដោយខ្លួនឯងលើបន្សំនិទ្ទេស A ទាំងអស់ដែលត្រូវបានអនុញ្ញាតនៅក្នុងគំរូ។


សំណួរ​សំខាន់​របស់ខ្ញុំ​គឺ៖ តើ​ការ​បង្គត់​ពិន្ទុ​ដំបូង​ទៅ​ជា​ពិន្ទុ​មុខវិជ្ជា​ទាំងមូល​នាំ​ឱ្យ​មាន​ការ​គណនា​សាលា​ខុស​ពី​ការ​គណនា​ដោយ​ប្រើ​មធ្យមភាគ​មុខវិជ្ជា​ដែល​មិន​បង្គត់​ញឹកញាប់​ប៉ុណ្ណា? លើស​ពី​នេះ វា​គួរ​ឱ្យ​ចាប់អារម្មណ៍​ក្នុង​ការ​មើល​ថា​តើ​មាន​ការ​ផ្លាស់ប្តូរ​អ្វី​ប្រសិនបើ​មធ្យមភាគ​នៃ​មុខវិជ្ជា​នីមួយៗ (ដូច​ដែល​បាន​ណែនាំ​នៅ​ទីនោះ) ដំបូង​ឡើយ​ត្រូវ​បាន​បង្គត់​ទៅ​ត្រឹម​ខ្ទង់​ទសភាគ​តែមួយ​ប៉ុណ្ណោះ។

យោងតាម ផ្នែកទី 6 នៃបទប្បញ្ញត្តិសាលាបឋមសិក្សាបាវ៉ា រៀន ថ្នាក់ជាមធ្យមត្រូវបានគណនាចេញពីថ្នាក់ក្នុងមុខវិជ្ជាភាសាអាល្លឺម៉ង់ គណិតវិទ្យា និងការសិក្សាក្នុងស្រុក និងទូទៅ។ បទប្បញ្ញត្តិអនុវត្ត បញ្ជាក់ពីដែនកំណត់រហូតដល់ និងរួមទាំង \(2{,}33\) និងរហូតដល់ និងរួមទាំង \(2{,}66\) ។ នៅក្នុងគំរូគណនាខាងក្រោម មធ្យមភាគសរុបនីមួយៗត្រូវបានកាត់មកត្រឹមពីរខ្ទង់ទសភាគ ហើយមិនត្រូវបានបង្គត់ម្តងទៀតទេ។ ដូច្នេះ ឧទាហរណ៍...

\[
\frac{2{,}33+2{,}34+2{,}34}{3}=2{,}3366\ldots \longrightarrow 2{,}33.
\]

នេះ​មាន​សារៈសំខាន់​ណាស់​សម្រាប់​ការចាត់ថ្នាក់៖ \(2{,}3366\ldots\) មិន​ក្លាយជា \(2{,}34\) ទេ ប៉ុន្តែ​ក្លាយជា \(2{,}33\) ហើយ​ដូច្នេះ​វា​នៅតែ​គ្រប់គ្រាន់​សម្រាប់​សាលា​វេយ្យាករណ៍។

ធាតុដំបូងបង្ហាញពីការបង្គត់ដំបូងជាមួយនឹងតម្លៃមធ្យមជាក់លាក់តាមប្រធានបទដែលបានសន្មត់ \(1{,}6\) , \(2{,}6\) និង \(2{,}6\) ។ ពីទាំងនេះ ថ្នាក់ទាំងមូល \(2\) , \(3\) និង \(3\) ត្រូវបានទាញយកជាមុនសិន។ មធ្យមភាគរបស់ពួកវាគឺ

\[
\frac{2+3+3}{3}=2{,}6666\ldots \longrightarrow 2{,}66,
\]

ដែលមានន័យថាសិស្សមិនមានលក្ខណៈសម្បត្តិគ្រប់គ្រាន់សម្រាប់ការចូលរៀននៅសាលាវេយ្យាករណ៍ដោយផ្ទាល់ទេ។ ទោះជាយ៉ាងណាក៏ដោយ បើគ្មានការបង្គត់ទៅថ្នាក់ទាំងមូលទេ លទ្ធផលនៅក្នុងឧទាហរណ៍សម្មតិកម្មនឹងមាន...

\[
\frac{1{,}6+2{,}6+2{,}6}{3}=2{,}2666\ldots \longrightarrow 2{,}26.
\]

នៅក្នុងឧទាហរណ៍ទីពីរ ការបង្គត់ដំណើរការក្នុងទិសដៅផ្ទុយ៖ \(2{,}4\) , \(3{,}4\) និង \(2{,}4\) ក្លាយជាតម្លៃចំណាំទាំងមូល \(2\) , \(3\) និង \(2\) ជាផ្លូវការ \(2{,}33\) ។ ទោះជាយ៉ាងណាក៏ដោយ តម្លៃដែលមិនបង្គត់បង្កើតជា \(2{,}73\) ។ ឧទាហរណ៍បង្ហាញយ៉ាងច្បាស់អំពីឥទ្ធិពល។ ទោះជាយ៉ាងណាក៏ដោយ ពួកវាមិនទាន់បង្ហាញពីភាពញឹកញាប់ដែលវាកើតឡើង ឬផលវិបាកនៃវិធីសាស្ត្របង្គត់ផ្សេងគ្នានោះទេ។

ដូច្នេះ សម្រាប់ការគណនារបស់ខ្ញុំ ខ្ញុំប្រើចន្លោះលទ្ធផលច្បាស់លាស់។ មធ្យមភាគប្រធានបទនីមួយៗអាចជាតម្លៃ \(501\) នៅក្នុងវា។

\[
1{,}00,\, 1{,}01,\, 1{,}02,\, \ldots, \, 5{,}99, \, 6{,}00
\]

ឧបមាថា ខ្ញុំថ្លឹងថ្លែង​ការ​រួម​បញ្ចូល​គ្នា​តាម​លំដាប់​លំដោយ​នៃ​ភាសា​អាល្លឺម៉ង់ គណិតវិទ្យា និង​ការ​សិក្សា​ក្នុង​ស្រុក និង​ទូទៅ​ស្មើៗ​គ្នា។ ដូច្នេះ​មាន

\[
501^3=125\,751\,501
\]

ករណីសិក្សា។ ដូច្នេះគំរូនេះមិនមានភាពមិនច្បាស់លាស់ទេ ប៉ុន្តែជាសិប្បនិម្មិត៖ វាសន្មតថាមធ្យមភាគមុខវិជ្ជាដែលចែកចាយស្មើៗគ្នា ឯករាជ្យភាពនៃមុខវិជ្ជាទាំងបី និងជំហានមួយរយយ៉ាងពិតប្រាកដ។ វាមិនឆ្លុះបញ្ចាំងពីការចែកចាយជាក់ស្តែងរបស់កុមារបឋមសិក្សាបាវ៉ារៀនទេ។

ចំពោះមធ្យមភាគប្រធានបទបី \(d,m,h\) យើងសរសេរ

\[
A(d,m,h)=\frac{\left\lfloor 100\cdot\frac{d+m+h}{3}\right\rfloor}{100}
\]

សម្រាប់មធ្យមភាគសរុបត្រូវបានកាត់មកត្រឹមពីរខ្ទង់ទសភាគ។ ឥឡូវនេះយើងប្រៀបធៀបវិធីសាស្ត្រគណនាបី។:

\[
\begin{តម្រឹម}
A_0 &= A(\ឈ្មោះប្រតិបត្តិករ{ជុំ}(d),\ឈ្មោះប្រតិបត្តិករ{ជុំ}(m),\ឈ្មោះប្រតិបត្តិករ{ជុំ}(h)),\\
A_1 &= A(\ឈ្មោះប្រតិបត្តិករ{ជុំ}_1(ឃ),\ឈ្មោះប្រតិបត្តិករ{ជុំ}_1(ម),\ឈ្មោះប្រតិបត្តិករ{ជុំ}_1(ជ)),\\
A_\mathrm{ref} &= A(d,m,h)។
\end{តម្រឹម}
\]

\(A_0\) ត្រូវគ្នាទៅនឹងការគណនាដោយប្រើថ្នាក់ទាំងមូល \(A_1\) ត្រូវគ្នាទៅនឹងសំណើដែលមានខ្ទង់ទសភាគមួយ និង \(A_\mathrm{ref}\) ត្រូវគ្នាទៅនឹងឯកសារយោងដែលមិនបង្គត់នៅក្នុងគំរូ។ ឧទាហរណ៍ ការគណនាអាចត្រូវបានអនុវត្តដោយផ្ទាល់នៅក្នុង Rust ។:

const SCHOOL_GYMNASIUM: i32 = 0;
const SCHOOL_REALSCHULE: i32 = 1;
const SCHOOL_MITTELSCHULE: i32 = 2;
const FLOAT_TOLERANCE: f64 = 1e-9;

#[derive(Clone, Copy, Default)]
struct Statistic {
    conflict_count: u64,
    total_count: u64,
}

fn determine_school(average: f64) -> i32 {
    if average <= 2.33 {
        return SCHOOL_GYMNASIUM;
    }
    if average <= 2.66 {
        return SCHOOL_REALSCHULE;
    }
    SCHOOL_MITTELSCHULE
}

fn calculate_average(note_deutsch: f64, note_mathe: f64, note_hsu: f64) -> f64 {
    let average = (note_deutsch + note_mathe + note_hsu) / 3.0;
    ((average + FLOAT_TOLERANCE) * 100.0).floor() / 100.0
}

fn round_to_whole_grade(grade: f64) -> f64 {
    grade.round()
}

fn round_to_one_decimal(grade: f64) -> f64 {
    (grade * 10.0).round() / 10.0
}

fn normalize_grade(grade: f64) -> f64 {
    (grade * 100.0).round() / 100.0
}

fn percentage(count: u64, total: u64) -> f64 {
    count as f64 / total as f64 * 100.0
}

fn main() {
    let mut combination_count = 0;
    let mut official_reference_conflicts = 0;
    let mut official_proposal_conflicts = 0;
    let mut proposal_reference_conflicts = 0;
    let mut statistics = [Statistic::default(); 4];

    let mut note_deutsch = 1.0;
    while note_deutsch <= 6.0 {
        let mut note_mathe = 1.0;
        while note_mathe <= 6.0 {
            let mut note_hsu = 1.0;
            while note_hsu <= 6.0 {
                combination_count += 1;

                let official_average = calculate_average(
                    round_to_whole_grade(note_deutsch),
                    round_to_whole_grade(note_mathe),
                    round_to_whole_grade(note_hsu),
                );
                let proposed_average = calculate_average(
                    round_to_one_decimal(note_deutsch),
                    round_to_one_decimal(note_mathe),
                    round_to_one_decimal(note_hsu),
                );
                let reference_average =
                    calculate_average(note_deutsch, note_mathe, note_hsu);
                let official_school = determine_school(official_average);
                let proposed_school = determine_school(proposed_average);
                let reference_school = determine_school(reference_average);

                if official_average == 3.0 {
                    statistics[0].total_count += 1;
                    if reference_school != SCHOOL_MITTELSCHULE {
                        statistics[0].conflict_count += 1;
                    }
                }
                if official_average == 2.66 {
                    statistics[1].total_count += 1;
                    if reference_school == SCHOOL_GYMNASIUM {
                        statistics[1].conflict_count += 1;
                    }
                }
                if official_average == 2.33 {
                    statistics[2].total_count += 1;
                    if reference_school != SCHOOL_GYMNASIUM {
                        statistics[2].conflict_count += 1;
                    }
                }
                if official_average == 2.66 {
                    statistics[3].total_count += 1;
                    if reference_school == SCHOOL_MITTELSCHULE {
                        statistics[3].conflict_count += 1;
                    }
                }

                if official_school != reference_school {
                    official_reference_conflicts += 1;
                }
                if official_school != proposed_school {
                    official_proposal_conflicts += 1;
                }
                if proposed_school != reference_school {
                    proposal_reference_conflicts += 1;
                }

                note_hsu = normalize_grade(note_hsu + 0.01);
            }
            note_mathe = normalize_grade(note_mathe + 0.01);
        }
        note_deutsch = normalize_grade(note_deutsch + 0.01);
    }

    println!(
        "official/reference: {}%",
        percentage(official_reference_conflicts, combination_count)
    );
    println!(
        "official/proposal: {}%",
        percentage(official_proposal_conflicts, combination_count)
    );
    println!(
        "proposal/reference: {}%",
        percentage(proposal_reference_conflicts, combination_count)
    );
    for (index, statistic) in statistics.iter().enumerate() {
        println!(
            "#{}: {}% ({}/{})",
            index + 1,
            percentage(statistic.conflict_count, statistic.total_count),
            statistic.conflict_count,
            statistic.total_count
        );
    }
}

ការអត់ធ្មត់តិចតួចនៅក្នុង calculate_average រារាំងតម្លៃដូចជា \(2{,}67\) ដោយសារតែការតំណាងអណ្តែតគោលពីររបស់វា វាត្រូវបានគេចាត់ទុកខុស \(2{,}669999\ldots\) ត្រូវបានកាត់ផ្តាច់។ normalize_grade លើសពីនេះ វាកាត់បន្ថយតម្លៃរង្វិលជុំនីមួយៗត្រឡប់ទៅក្រឡាចត្រង្គលំដាប់ទី 100 វិញ។ យ៉ាងហោចណាស់មានតម្លៃមធ្យមពីរផ្សេងគ្នាដែលអាចធ្វើទៅបាន។ \(1/300\) ដាច់ដោយឡែកពីគ្នា; ការអត់ធ្មត់ \(10^{-9}\) ដូច្នេះវាតូចល្មមមិនអាចផ្លាស់ប្តូរករណីព្រំដែនពិតប្រាកដណាមួយបានទេ។

កម្មវិធីនេះត្រូវបានចងក្រង និងចាប់ផ្តើមជាមួយ

rustc -O calc.rs && ./calc

កម្មវិធីនេះធ្វើម្តងទៀតតាមរយៈបន្សំ \(125\,751\,501\) ទាំងអស់ និងលទ្ធផលត្រឡប់មកវិញ។:

ការប្រៀបធៀបចំណែក
ថ្នាក់ទាំងមូលធៀបនឹងមធ្យមភាគមុខវិជ្ជាដែលមិនបង្គត់\(10{,}4411\,\%\)
ពិន្ទុទាំងមូលបើប្រៀបធៀបទៅនឹងសំណើដែលមានខ្ទង់ទសភាគមួយ\(10{,}1521\,\%\)
សំណើដែលមានខ្ទង់ទសភាគមួយបើប្រៀបធៀបទៅនឹងមធ្យមភាគអ្នកជំនាញដែលមិនបង្គត់\(0{,}6615\,\%\)

តម្លៃកណ្តាលសម្រាប់ខ្ញុំគឺ \(10{,}4411\,\%\): ក្នុង​ចំណោម​ដប់​បន្សំ ការ​បង្គត់​ដំបូង​ទៅ​ជា​ថ្នាក់​ទាំងមូល​នាំ​ឱ្យ​មាន​ប្រភេទ​សាលា​ដែល​បាន​គណនា​ខុស​ពី​ឯកសារ​យោង​ដែល​មិន​បង្គត់។ សមាមាត្រ​នេះ​ពិពណ៌នា​ទាំងស្រុង​អំពី​ឥទ្ធិពល​បង្គត់​ក្នុង​គំរូ​ដែល​បាន​ជ្រើសរើស។

ការប្តូរទៅមធ្យមភាគអ្នកជំនាញដែលមានខ្ទង់ទសភាគមួយនឹងនាំឱ្យមានការចាត់ថ្នាក់ខុសគ្នានៅក្នុង \(10{,}1521\,\%\) នៃករណីគំរូទាំងអស់បើប្រៀបធៀបទៅនឹងវិធីសាស្ត្រមុន។ ទោះជាយ៉ាងណាក៏ដោយ ការប្រៀបធៀបទីបីគឺមានសារៈសំខាន់ណាស់៖ បើប្រៀបធៀបទៅនឹងឯកសារយោងដែលមិនបង្គត់ វិធីសាស្ត្រដែលមានខ្ទង់ទសភាគមួយទុកត្រឹមតែ \(0{,}6615\,\%\) ករណីដែលងាកចេញ។ ដូច្នេះ គម្លាតពីឯកសារយោងថយចុះដោយ

\[
1-\frac{0{,}6615}{10{,}4411}\approx 93{,}7\,\%.
\]

ចំពោះខ្ញុំ នេះគឺជាផលវិបាកដ៏គួរឱ្យសង្ស័យនៃវិធីសាស្ត្រគណនាបច្ចុប្បន្ន៖ សមិទ្ធផលជាក់លាក់តាមមុខវិជ្ជាដែលសន្មត់នៅតែមិនផ្លាស់ប្តូរ។ មានតែចំណុចពេលវេលាដែលការបង្គត់កើតឡើងប៉ុណ្ណោះដែលអាចផ្លាស់ប្តូរប្រភេទសាលាដែលបានគណនា។ ខណៈពេលដែលការគណនាដោយប្រើខ្ទង់ទសភាគមួយមិនលុបបំបាត់ឥទ្ធិពលនេះទាំងស្រុងនោះទេ វាកាត់បន្ថយវាយ៉ាងច្រើននៅក្នុងគំរូ។

ទោះជាយ៉ាងណាក៏ដោយ តួលេខទាំងនេះមិនប្រាប់យើងពីចំនួនកុមារដែលរងផលប៉ះពាល់នោះទេ។ ថ្នាក់លើកាតរបាយការណ៍មិនចាំបាច់ត្រូវបានបង្កើតជាមធ្យមភាគដែលបង្គត់ដោយមេកានិចទេ លទ្ធផលសិក្សាមិនត្រូវបានចែកចាយស្មើៗគ្នា ឬឯករាជ្យនោះទេ ហើយជម្រើសពិតប្រាកដនៃប្រភេទសាលារៀនមិនអាស្រ័យតែលើតួលេខទាំងបីនេះទេ។ ការគណនារបស់ខ្ញុំឆ្លើយសំណួរជាក់លាក់ជាងនេះ៖ តើការបង្គត់ផ្លាស់ប្តូរថ្នាក់ដែលបានគណនាញឹកញាប់ប៉ុណ្ណា នៅពេលដែលបន្សំតម្លៃទីរយទាំងអស់មានលទ្ធភាពស្មើគ្នា?

ជាចុងក្រោយ សូមធ្វើការប្រៀបធៀបជាមួយនឹងការបង្ហោះដើម៖ អត្រាសរុបដែលបានរៀបរាប់នៅទីនោះ ប្រហែល \(10\,\%\) គឺជិតនឹង \(10{,}4411\,\%\) របស់ខ្ញុំ។ ទោះជាយ៉ាងណាក៏ដោយ ការគណនារបស់ខ្ញុំមិនបញ្ជាក់ពីករណីនីមួយៗទាំងបួននោះទេ ដែលករណីនីមួយៗត្រូវបានរាយការណ៍ថាមាន \(1/6 \approx 17\,\%\) ចំពោះ "ការខកខានសិក្សានៅវិទ្យាល័យដែលមាន \(3{,}00\) ", "ការខកខានសិក្សានៅវិទ្យាល័យដែលមាន \(2{,}33\) ", "ការសម្រេចបានការបញ្ចប់ការសិក្សានៅវិទ្យាល័យដែលមាន \(2{,}66\) " និង "ការសម្រេចបានការបញ្ចប់ការសិក្សានៅវិទ្យាល័យដែលមាន \(2{,}66\) \(1{,}4615\,\%\) \(59{,}6096\,\%\) \(1{,}2023\,\%\) \(62{,}9395\,\%\)

តម្លៃទាំងបួនគឺជាប្រូបាប៊ីលីតេតាមលក្ខខណ្ឌដែលមានក្រុមយោងដែលមានទំហំខុសៗគ្នា។ បើគ្មានលំហគំរូដែលបានកំណត់ខុសគ្នាទេ \(1/6\) មិនអាចទាញយកពីពួកវាបានទេ។ ការគណនារបស់ខ្ញុំដូច្នេះបញ្ជាក់ពីឥទ្ធិពលបង្គត់ ប៉ុន្តែមិនមែនប្រូបាប៊ីលីតេនីមួយៗទាំងនេះទេ។ ក្នុងករណីណាក៏ដោយ សេចក្តីថ្លែងការណ៍អំពីចំនួនពិតប្រាកដនៃកុមារដែលរងផលប៉ះពាល់នឹងតម្រូវឱ្យមានការចែកចាយថ្នាក់ពិតប្រាកដ និងការពឹងផ្អែករបស់ពួកគេ។

ថយក្រោយ