Nā hewa hoʻopōʻai i ka wā o ka hoʻololi ʻana

Ma Bavaria, ʻo ka awelika māka holoʻokoʻa o \(2{,}33\) e hōʻoia i ke kūpono no Gymnasium \(2{,}34\) . Ma kēia palena ʻoi, hiki i ke kauoha o ʻelua mau hana hoʻopuni ke hoʻoholo i ka ʻaoʻao e hāʻule ai ke keiki. Kūkākūkā ʻo Günther Felbinger i nā hopena hiki o kēia hopena hoʻopuni ma kahi pou blog . Ma muli o ka hoihoi maʻemaʻe, ua helu wau i nā hopena iaʻu iho ma nā hui pū ʻana o nā māka āpau i ʻae ʻia i ke kumu hoʻohālike.


ʻO kaʻu nīnau nui: Pehea ka pinepine o ka hoʻopuni mua ʻana i nā māka kumuhana holoʻokoʻa e alakaʻi ai i kahi ʻano helu kula ʻokoʻa ma mua o nā helu e hoʻohana ana i nā awelika kumuhana i hoʻopuni ʻole ʻia? Eia kekahi, he mea hoihoi ia e ʻike i nā loli inā e hoʻopuni mua ʻia nā awelika o kēlā me kēia kumuhana (e like me ka mea i hōʻike ʻia ma laila) i hoʻokahi wahi decimal wale nō.

Wahi a ka Māhele 6 o nā Rula Kula Haʻahaʻa Bavarian, ua helu ʻia ka māka awelika mai nā māka ma ka Kelemānia, Makemakika, a me nā Haʻawina Kūloko a me nā Haʻawina Laulā. Kuhikuhi nā lula hoʻokō i nā palena a hiki i \(2{,}33\) a hiki i \(2{,}66\) . Ma ke kumu hoʻohālike helu ma lalo nei, ua ʻoki ʻia kēlā me kēia awelika holoʻokoʻa i ʻelua mau wahi decimal a ʻaʻole i hoʻopuni hou ʻia. No laila, no ka laʻana...

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

He mea koʻikoʻi kēia no ka hoʻokaʻawale ʻana: ʻaʻole lilo \(2{,}3366\ldots\) i \(2{,}34\) , akā, \(2{,}33\) a no laila ua lawa nō ia no ke kula haʻahaʻa.

Hōʻike ka hoʻokomo mua i ka hoʻopōʻai mua ʻana me nā waiwai awelika kikoʻī i manaʻo ʻia \(1{,}6\) , \(2{,}6\) , a me \(2{,}6\) . Mai kēia mau mea, ua loaʻa mua nā māka holoʻokoʻa \(2\) , \(3\) , a me \(3\) . ʻO ko lākou awelika

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

ʻo ia hoʻi, ʻaʻole kūpono ka haumāna no ke komo pololei ʻana i ke kula grammar. Eia naʻe, me ka ʻole o ka hoʻopuni ʻana i nā māka holoʻokoʻa, ʻo ka hopena ma ka laʻana kuhiakau...

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

Ma ka lua o ka laʻana, hana ka hoʻopōʻai ʻana ma ke ʻaoʻao ʻē aʻe: \(2{,}4\) , \(3{,}4\) a me \(2{,}4\) e lilo i nā waiwai nota holoʻokoʻa \(2\) , \(3\) a me \(2\) , ma ke ʻano kūhelu \(2{,}33\) . Eia naʻe, ʻo nā waiwai i hoʻopōʻai ʻole ʻia e hopena i ka \(2{,}73\) . Hōʻike maopopo nā laʻana i ka hopena. Eia naʻe, ʻaʻole lākou e hōʻike i ka pinepine o kona hana ʻana a i ʻole nā hopena o kahi ʻano hoʻopōʻai ʻokoʻa.

No laila, no kaʻu helu ʻana, hoʻohana wau i kahi hakahaka hopena maopopo. Hiki i kēlā me kēia awelika kumuhana ke lilo i hoʻokahi o nā waiwai \(501\) i loko.

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

Manaʻo. Ke kaupaona like nei au i nā hui pū ʻana o ka Kelemānia, ka makemakika, a me nā haʻawina kūloko a me nā haʻawina laulā. No laila, aia nā

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

Nā Hihia. No laila, ʻaʻole kānalua ke kumu hoʻohālike, akā he mea hana: Manaʻo ia i nā awelika kumuhana i hoʻokaʻawale like ʻia, ke kūʻokoʻa o nā kumuhana ʻekolu, a me nā ʻanuʻu o hoʻokahi haneli. ʻAʻole ia e hōʻike i ka hoʻokaʻawale maoli ʻana o nā keiki kula haʻahaʻa Bavarian.

No nā kumuhana ʻekolu, ʻo ia hoʻi \(d,m,h\) kākau mākou

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

no ka awelika holoʻokoʻa i ʻoki ʻia i ʻelua mau wahi decimal. I kēia manawa ke hoʻohālikelike nei mākou i ʻekolu mau ʻano helu.:

\[
\begin{aligned}
A_0 &= A(\inoa mea hoʻohana{pōʻai}(d),\inoa mea hoʻohana{pōʻai}(m),\inoa mea hoʻohana{pōʻai}(h)),\\
A_1 &= A(\inoa mea hoʻohana{pōʻai}_1(d),\inoa mea hoʻohana{pōʻai}_1(m),\inoa mea hoʻohana{pōʻai}_1(h)),\\
A_\mathrm{ref} &= A(d,m,h).
\end{aligned}
\]

Pili \(A_0\) i ka helu ʻana me ka hoʻohana ʻana i nā māka holoʻokoʻa, \(A_1\) i ka manaʻo me hoʻokahi wahi decimal, a ʻo \(A_\mathrm{ref}\) i ka kuhikuhi i hoʻopuni ʻole ʻia i loko o ke kumu hoʻohālike. Hiki ke hoʻokō pololei ʻia ka helu ʻana ma Rust , no ka laʻana.:

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
        );
    }
}

ʻO ke ahonui liʻiliʻi i loko calculate_average pale i kahi waiwai e like me \(2{,}67\) ma muli o kona ʻano lana binary, ua manaʻo hewa ʻia \(2{,}669999\ldots\) ua ʻoki ʻia. normalize_grade Eia kekahi, hoʻemi ia i kēlā me kēia waiwai loop i kahi grid haneli. Aia ma ka liʻiliʻi he ʻelua mau waiwai awelika like ʻole. \(1/300\) kaʻawale; ke ahonui o \(10^{-9}\) no laila he liʻiliʻi ia e hiki ʻole ai ke hoʻololi i kekahi hihia palena maoli.

Ua hoʻopili ʻia ka polokalamu a hoʻomaka me

rustc -O calc.rs && ./calc

Hoʻomau ka papahana ma o nā hui āpau \(125\,751\,501\) a me nā hoʻihoʻi:

HoʻohālikelikeʻĀpana
Nā māka holoʻokoʻa e kūʻē i nā awelika kumuhana i hoʻopuni ʻole ʻia\(10{,}4411\,\%\)
Nā māka holoʻokoʻa i hoʻohālikelike ʻia me ka manaʻo me hoʻokahi wahi decimal\(10{,}1521\,\%\)
Manaʻo me hoʻokahi wahi decimal i hoʻohālikelike ʻia me nā awelika loea i hoʻopuni ʻole ʻia\(0{,}6615\,\%\)

ʻO ke kumukūʻai waena noʻu \(10{,}4411\,\%\): Ma mua o hoʻokahi i loko o nā hui ʻumi, ʻo ka hoʻopōʻai mua ʻana i nā māka holoʻokoʻa e alakaʻi ai i kahi ʻano kula i helu ʻia ʻokoʻa ma mua o ke kuhikuhi i hoʻopōʻai ʻole ʻia. Hōʻike wale kēia ʻāpana i ka hopena hoʻopōʻai i loko o ke kumu hoʻohālike i koho ʻia.

ʻO ka hoʻololi ʻana i nā awelika loea me hoʻokahi wahi decimal e alakaʻi i kahi hoʻokaʻawale ʻokoʻa ma \(10{,}1521\,\%\) o nā hihia hoʻohālike āpau i hoʻohālikelike ʻia me ke ʻano hana ma mua. Eia nō naʻe, he mea koʻikoʻi ke kolu o ka hoʻohālikelike: i hoʻohālikelike ʻia me ka kuhikuhi i hoʻopuni ʻole ʻia, ʻo ke ʻano hana me hoʻokahi wahi decimal e waiho wale ana i \(0{,}6615\,\%\) nā hihia e haʻalele ana. No laila e emi ana ka haʻalele ʻana mai ka kuhikuhi ʻana e

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

ʻO kēia, noʻu, ʻo ia ka hopena kānalua o ke ʻano helu o kēia manawa: ʻaʻole i loli nā hoʻokō i manaʻo ʻia no ke kumuhana; ʻo ka manawa wale nō e hiki ai ke hoʻopuni ʻia ke hoʻololi i ke ʻano kula i helu ʻia. ʻOiai ʻaʻole e hoʻopau loa ka helu ʻana me hoʻokahi wahi decimal i kēia hopena, hoʻemi nui ia i loko o ke kumu hoʻohālike.

ʻAʻole naʻe kēia mau helu e haʻi mai iā mākou i ka nui o nā keiki i hoʻopilikia maoli ʻia. ʻAʻole pono e hoʻopuka ʻia nā māka kāleka hōʻike ma ke ʻano he awelika i hoʻopuni ʻia e ka mīkini, ʻaʻole i hoʻolaha like ʻia ka hana hoʻonaʻauao a kūʻokoʻa paha, a ʻo ke koho maoli o ke ʻano kula ʻaʻole hilinaʻi wale ʻia ma kēia mau helu ʻekolu. Pane kaʻu helu ʻana i kahi nīnau kikoʻī: Pehea ka pinepine o ka hoʻololi ʻana o ka hoʻopuni ʻana i ka māka i helu ʻia i ka wā e like like ai nā hui pū ʻana o nā waiwai haneli āpau?

ʻO ka mea hope loa, he hoʻohālikelike me ka pou mua: ʻO ka helu holoʻokoʻa i ʻōlelo ʻia ma laila, ma kahi o \(10\,\%\) ua kokoke i kaʻu \(10{,}4411\,\%\) . Eia naʻe, ʻaʻole i hōʻoia kaʻu mau helu i nā hihia pākahi ʻehā, i hōʻike ʻia kēlā me kēia he \(1/6 \approx 17\,\%\) No ka "haʻalele i ke kula kiʻekiʻe me \(3{,}00\) ", "haʻalele i ke kula haʻahaʻa me \(2{,}33\) ", "hoʻokō i ke kula haʻahaʻa me \(2{,}66\) %", a me "hoʻokō i ke kula kiʻekiʻe me \(2{,}66\) \(1{,}4615\,\%\) \(59{,}6096\,\%\) \(1{,}2023\,\%\) \(62{,}9395\,\%\) .

ʻO nā waiwai ʻehā he mau kūlana kūlana me nā hui kuhikuhi nui like ʻole. Me ka ʻole o kahi ākea laʻana i wehewehe ʻokoʻa ʻia \(1/6\) mai iā lākou. No laila, hōʻoia kaʻu helu ʻana i ka hopena hoʻopuni, akā ʻaʻole kēia mau kūlana pākahi. I kēlā me kēia hihia, ʻo nā ʻōlelo e pili ana i ka helu maoli o nā keiki i hoʻopilikia ʻia e koi i nā hoʻolaha māka maoli a me ko lākou mau hilinaʻi.

Hope