Tại Bavaria, điểm trung bình chung là \(2{,}33\) đủ điều kiện vào trường Gymnasium \(2{,}34\) thì không. Tại điểm phân định rõ ràng này, thứ tự của hai phép làm tròn có thể quyết định học sinh thuộc về phía nào. Günther Felbinger đã thảo luận về những hậu quả tiềm tàng của hiệu ứng làm tròn này trong một bài đăng trên blog . Vì tò mò, tôi đã tự tính toán các hiệu ứng này trên tất cả các tổ hợp điểm số được cho phép trong mô hình.
Câu hỏi trọng tâm của tôi là: Việc làm tròn điểm số môn học thành điểm nguyên sớm thường dẫn đến kiểu tính toán khác biệt như thế nào so với việc tính toán sử dụng điểm trung bình môn học chưa làm tròn? Hơn nữa, sẽ rất thú vị nếu xem xét những thay đổi nào xảy ra nếu điểm trung bình của từng môn học (như đã đề xuất) ban đầu chỉ được làm tròn đến một chữ số thập phân.
Theo Mục 6 của Quy chế Trường Tiểu học Bavaria, điểm trung bình được tính từ điểm các môn tiếng Đức, Toán và các môn học Địa phương và Tổng quát. Quy định thực thi nêu rõ giới hạn điểm là tối đa \(2{,}33\) và tối đa \(2{,}66\) . Trong mô hình tính toán sau đây, mỗi điểm trung bình tổng thể được làm tròn đến hai chữ số thập phân và không được làm tròn lại. Ví dụ:
\[
\frac{2{,}33+2{,}34+2{,}34}{3}=2{,}3366\ldots \longrightarrow 2{,}33.
\]
Điều này rất quan trọng đối với việc phân loại: \(2{,}3366\ldots\) không trở thành \(2{,}34\) , mà là \(2{,}33\) và do đó vẫn đủ điều kiện cho trường trung học.
Mục nhập ban đầu minh họa việc làm tròn sớm với các giá trị trung bình giả định cụ thể cho từng môn học \(1{,}6\) , \(2{,}6\) và \(2{,}6\) . Từ đó, các điểm số nguyên \(2\) , \(3\) và \(3\) được tính toán đầu tiên. Giá trị trung bình của chúng là
\[
\frac{2+3+3}{3}=2{,}6666\ldots \longrightarrow 2{,}66,
\]
Điều đó có nghĩa là học sinh đó không đủ điều kiện vào trường trung học phổ thông. Tuy nhiên, nếu không làm tròn đến số nguyên, kết quả trong ví dụ giả định sẽ là...
\[
\frac{1{,}6+2{,}6+2{,}6}{3}=2{,}2666\ldots \longrightarrow 2{,}26.
\]
Trong ví dụ thứ hai, việc làm tròn hoạt động theo hướng ngược lại: \(2{,}4\) , \(3{,}4\) và \(2{,}4\) trở thành giá trị nốt nguyên \(2\) , \(3\) và \(2\) , chính thức là \(2{,}33\) . Tuy nhiên, các giá trị chưa làm tròn lại cho kết quả là \(2{,}73\) . Các ví dụ này minh họa rõ ràng hiệu ứng. Tuy nhiên, chúng chưa cho thấy tần suất xảy ra hiệu ứng này hoặc hậu quả của một phương pháp làm tròn khác.
Do đó, để tính toán, tôi sử dụng một không gian kết quả rõ ràng. Mỗi giá trị trung bình của chủ thể có thể là một trong \(501\) giá trị nằm trong đó.
\[
1{,}00,\, 1{,}01,\, 1{,}02,\, \ldots, \, 5{,}99, \, 6{,}00
\]
Giả sử. Tôi coi tất cả các tổ hợp có thứ tự của tiếng Đức, toán học và các môn học địa phương và tổng quát là ngang nhau. Do đó, có
\[
501^3=125\,751\,501
\]
Các trường hợp. Do đó, mô hình này rõ ràng nhưng mang tính nhân tạo: Nó giả định các giá trị trung bình của đối tượng được phân bố đều, sự độc lập của ba đối tượng và các bước chính xác là một phần trăm. Nó không phản ánh sự phân bố thực tế của trẻ em tiểu học ở Bavaria.
Đối với ba chủ thể có nghĩa là \(d,m,h\) chúng ta viết
\[
A(d,m,h)=\frac{\left\lfloor 100\cdot\frac{d+m+h}{3}\right\rfloor}{100}
\]
Đối với giá trị trung bình tổng thể được làm tròn đến hai chữ số thập phân. Bây giờ chúng ta so sánh ba phương pháp tính toán.:
\[
\begin{aligned}
A_0 &= A(\operatorname{round}(d),\operatorname{round}(m),\operatorname{round}(h)),\\
A_1 &= A(\operatorname{round}_1(d),\operatorname{round}_1(m),\operatorname{round}_1(h)),\\
A_\mathrm{ref} &= A(d,m,h).
\end{aligned}
\]
\(A_0\) tương ứng với phép tính sử dụng số nguyên, \(A_1\) với đề xuất có một chữ số thập phân, và \(A_\mathrm{ref}\) với giá trị tham chiếu chưa làm tròn trong mô hình. Phép tính có thể được thực hiện trực tiếp trong Rust , chẳng hạn.:
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
);
}
}
Sai số nhỏ trong calculate_average ngăn chặn một giá trị như \(2{,}67\) Do cách biểu diễn số thực nhị phân của nó, nó đã bị nhầm lẫn coi là \(2{,}669999\ldots\) bị cắt đứt. normalize_grade Hơn nữa, nó giảm giá trị của mỗi vòng lặp về lưới bậc một trăm. Có ít nhất hai giá trị trung bình khác nhau có thể tồn tại. \(1/300\) riêng biệt; sự khoan dung của \(10^{-9}\) Do đó, kích thước này đủ nhỏ để không làm thay đổi bất kỳ trường hợp ranh giới thực sự nào.
Chương trình được biên dịch và khởi chạy với
rustc -O calc.rs && ./calc
Chương trình lặp qua tất cả \(125\,751\,501\) tổ hợp và trả về:
| So sánh | Phần |
| Điểm tổng so với điểm trung bình môn học chưa làm tròn | \(10{,}4411\,\%\) |
| Điểm số tổng thể so với đề xuất với một chữ số thập phân | \(10{,}1521\,\%\) |
| Đề xuất với một chữ số thập phân so sánh với mức trung bình của chuyên gia chưa làm tròn. | \(0{,}6615\,\%\) |
Giá trị cốt lõi đối với tôi là \(10{,}4411\,\%\): Trong hơn một phần mười các trường hợp, việc làm tròn sớm đến điểm số nguyên dẫn đến loại trường được tính toán khác so với loại trường tham chiếu chưa làm tròn. Tỷ lệ này chỉ mô tả ảnh hưởng của việc làm tròn trong mô hình đã chọn.
Việc chuyển sang sử dụng giá trị trung bình của chuyên gia với một chữ số thập phân sẽ dẫn đến kết quả phân loại khác biệt trong \(10{,}1521\,\%\) tổng số trường hợp mô hình so với phương pháp trước đó. Tuy nhiên, phép so sánh thứ ba rất quan trọng: so với giá trị tham chiếu chưa làm tròn, phương pháp với một chữ số thập phân chỉ còn lại \(0{,}6615\,\%\) trường hợp sai lệch. Do đó, độ lệch so với giá trị tham chiếu giảm đi.
\[
1-\frac{0{,}6615}{10{,}4411}\approx 93{,}7\,\%.
\]
Theo tôi, đây chính xác là hệ quả đáng ngờ của phương pháp tính toán hiện tại: thành tích giả định theo từng môn học vẫn không thay đổi; chỉ có thời điểm làm tròn mới có thể thay đổi loại trường được tính toán. Mặc dù việc tính toán với một chữ số thập phân không loại bỏ hoàn toàn ảnh hưởng này, nhưng nó làm giảm đáng kể ảnh hưởng đó trong mô hình.
Tuy nhiên, những số liệu này không cho chúng ta biết có bao nhiêu trẻ em thực sự bị ảnh hưởng. Điểm số trong bảng điểm không nhất thiết được tạo ra bằng cách làm tròn điểm trung bình một cách máy móc, kết quả học tập không được phân bố đồng đều cũng không độc lập, và việc lựa chọn loại trường thực tế không chỉ phụ thuộc vào ba con số này. Phép tính của tôi trả lời một câu hỏi cụ thể hơn: Việc làm tròn làm thay đổi điểm số được tính toán thường xuyên như thế nào khi tất cả các tổ hợp giá trị phần trăm đều có khả năng xảy ra như nhau?
Cuối cùng, so sánh với bài đăng gốc: Tỷ lệ tổng thể được đề cập ở đó, khoảng \(10\,\%\) gần với \(10{,}4411\,\%\) của tôi. Tuy nhiên, các tính toán của tôi không xác nhận bốn trường hợp riêng lẻ, mỗi trường hợp được báo cáo là \(1/6 \approx 17\,\%\) Đối với "bỏ học trung học cơ sở với \(3{,}00\) ", "bỏ học trung học phổ thông với \(2{,}33\) ", "đạt trung học phổ thông với \(2{,}66\) " và "đạt trung học cơ sở với \(2{,}66\) \(1{,}4615\,\%\) \(59{,}6096\,\%\) \(1{,}2023\,\%\) \(62{,}9395\,\%\) .
Bốn giá trị này là xác suất có điều kiện với các nhóm tham chiếu có kích thước khác nhau. Nếu không có không gian mẫu được xác định khác nhau \(1/6\) không thể được suy ra từ chúng. Do đó, phép tính của tôi xác nhận hiệu ứng làm tròn, nhưng không xác nhận các xác suất riêng lẻ này. Trong bất kỳ trường hợp nào, các tuyên bố về số lượng trẻ em bị ảnh hưởng thực tế sẽ yêu cầu phân bố điểm thực tế và sự phụ thuộc của chúng.