วิธีที่ดีที่สุดในการทำเช่นนั้นคือการสร้างตัวเลขสุ่มที่กระจายอย่างเท่าเทียมกันในชุดตัวเลขจำนวนหนึ่งจากนั้นใช้ฟังก์ชั่นการฉายภาพกับชุดระหว่าง 0 และ 100 ที่การฉายภาพมีแนวโน้มที่จะตีตัวเลขที่คุณต้องการ
โดยทั่วไปแล้ววิธีทางคณิตศาสตร์ในการบรรลุเป้าหมายนี้คือการวางแผนฟังก์ชันความน่าจะเป็นของตัวเลขที่คุณต้องการ เราสามารถใช้เส้นโค้งรูประฆังได้ แต่เพื่อให้การคำนวณง่ายขึ้นเพียงแค่ทำงานกับพาราโบลาที่พลิกกลับ
ลองสร้างพาราโบลาแบบที่รากของมันอยู่ที่ 0 และ 100 โดยไม่บิดเบือนมัน เราได้สมการต่อไปนี้:
f(x) = -(x-0)(x-100) = -x * (x-100) = -x^2 + 100x
ตอนนี้พื้นที่ทั้งหมดภายใต้เส้นโค้งระหว่าง 0 ถึง 100 เป็นตัวแทนของชุดแรกของเราที่เราต้องการสร้างตัวเลข ที่นั่นรุ่นนั้นสุ่มอย่างสมบูรณ์ ดังนั้นสิ่งที่เราต้องทำคือหาขอบเขตของเซตแรกของเรา
แน่นอนว่าขอบเขตล่างคือ 0 ขอบเขตบนคือส่วนประกอบของฟังก์ชันที่ 100 ซึ่งก็คือ
F(x) = -x^3/3 + 50x^2
F(100) = 500,000/3 = 166,666.66666 (let's just use 166,666, because rounding up would make the target out of bounds)
ดังนั้นเรารู้ว่าเราจำเป็นต้องสร้างตัวเลขระหว่าง 0 ถึง 166,666 จากนั้นเราเพียงแค่นำหมายเลขนั้นมาฉายในเซตที่สองของเราซึ่งอยู่ระหว่าง 0 ถึง 100
เรารู้ว่าตัวเลขสุ่มที่เราสร้างขึ้นนั้นเป็นส่วนหนึ่งของพาราโบลาของเราด้วยอินพุต x ระหว่าง 0 และ 100 นั่นหมายความว่าเราต้องสมมติว่าตัวเลขสุ่มนั้นเป็นผลลัพธ์ของ F (x) และแก้หา x
ในกรณีนี้ F (x) เป็นสมการลูกบาศก์และในรูปแบบF(x) = ax^3 + bx^2 + cx + d = 0
ข้อความต่อไปนี้เป็นจริง:
a = -1/3
b = 50
c = 0
d = -1 * (your random number)
การแก้ปัญหานี้สำหรับ x ทำให้คุณได้จำนวนสุ่มที่คุณต้องการซึ่งรับประกันได้ว่าอยู่ในช่วง [0, 100] และมีโอกาสสูงที่จะอยู่ใกล้กับศูนย์กลางมากกว่าขอบ