ฉันได้เขียนโปรแกรมใน google Golang และสนุกกับมันเนื่องจากความกะทัดรัด แต่ฉันคิดว่ามันน่าประหลาดใจที่เกือบทุกวิธีของห้องสมุดคณิตศาสตร์มาตรฐานสำหรับประเภทจุดลอย มีเหตุผลใดที่ทำให้วิธีการเหล่านี้ไม่มีอยู่จริงสำหรับ ints
ฉันได้เขียนโปรแกรมใน google Golang และสนุกกับมันเนื่องจากความกะทัดรัด แต่ฉันคิดว่ามันน่าประหลาดใจที่เกือบทุกวิธีของห้องสมุดคณิตศาสตร์มาตรฐานสำหรับประเภทจุดลอย มีเหตุผลใดที่ทำให้วิธีการเหล่านี้ไม่มีอยู่จริงสำหรับ ints
คำตอบ:
คำตอบสั้น ๆ ก็คือ Go เป็นผู้สืบทอดต่อ C และห้องสมุดคณิตศาสตร์มาตรฐานของ C นั้นได้กำหนดไว้เกือบเฉพาะในแง่ของค่าทศนิยมที่มีความแม่นยำเดี่ยวและสองครั้ง
คำตอบที่ยาวกว่าคือในภาษาที่พิมพ์แบบสแตติกโดยไม่มี polymorphism หรือฟังก์ชั่นโอเวอร์โหลดเช่น Go (หรือ C) คุณจะต้องจัดการกับประเภทของฟังก์ชั่นที่จะรับและส่งคืนล่วงหน้าและเมื่อคุณจะจัดการกับ ประเภทเฉพาะในห้องสมุดคณิตศาสตร์ของคุณมีการดำเนินการที่น่าสนใจมากขึ้นในจำนวนจุดลอยตัวกว่าจำนวนเต็ม เพื่อเลือกตัวอย่าง
สแควร์หรือ nth ของจำนวนเต็มหรือจำนวนจุดลอยมักจะไม่สามารถแสดงเป็นจำนวนเต็ม
ค่าที่น้อยมากที่น่าสนใจของฟังก์ชันยอดเยี่ยมนั้นสามารถแทนได้เป็นจำนวนเต็ม
การหารค่าทศนิยมต้องใช้การปัดเศษน้อยกว่าการหารจำนวนเต็ม
โปรดทราบว่านี่ไม่ได้เป็นเรื่องยากอย่างที่คิดถ้าค่าอินพุตของคุณเป็นจำนวนเต็ม - ค่าที่สำคัญสามารถถูกแปลงเป็นค่าทศนิยมด้วย typecast ง่ายๆและส่วนใหญ่ถูกต้อง
นั่นคือเรื่องราวของภาษาอย่าง Go หรือ C ภาษาอื่น ๆ มีตัวเลือกอื่น ๆ :
ภาษาที่พิมพ์แบบไดนามิกสามารถให้ฟังก์ชั่นห้องสมุดคณิตศาสตร์ที่รับหรือส่งคืนหลายประเภทขึ้นอยู่กับสิ่งที่พวกเขาถูกเรียกด้วยหรือไม่ว่าค่าตอบแทนจะเป็นตัวแทนเป็นจำนวนเต็ม
ภาษาที่มีฟังก์ชั่นการทำงานมากเกินไปสามารถให้ฟังก์ชั่นเดียวกันหลายรุ่นขึ้นอยู่กับประเภทที่คุณผ่าน (อย่างเคร่งครัดนี่คือฟังก์ชั่นหลายอย่างที่มีชื่อเดียวกันแตกต่างจากกรณีที่พิมพ์แบบไดนามิกด้านบน)
ภาษาที่มีความหลากหลายชนิด (เช่นภาษาเชิงวัตถุที่มีการสืบทอด) สามารถกำหนดซูเปอร์คลาส "Number" พร้อมคลาสย่อยสำหรับทั้งจำนวนเต็มและค่าจำนวนจุดลอยตัวจากนั้นกำหนดฟังก์ชันคณิตศาสตร์ในแง่ของคลาสตัวเลขนี้ วิธีการนี้มีความยืดหยุ่นอย่างมากของวิธีการใช้ภาษาแบบไดนามิกในขณะที่ยังคงรักษาความเข้มงวดของวิธีการแบบคงที่หรือการใช้งานมากเกินไป
อย่างไรก็ตาม Go ไม่มีคุณสมบัติเหล่านี้