วิธีห้องสมุดคณิตศาสตร์ในภาษาโปรแกรมเขียนโปรแกรมของ Google


9

ฉันได้เขียนโปรแกรมใน google Golang และสนุกกับมันเนื่องจากความกะทัดรัด แต่ฉันคิดว่ามันน่าประหลาดใจที่เกือบทุกวิธีของห้องสมุดคณิตศาสตร์มาตรฐานสำหรับประเภทจุดลอย มีเหตุผลใดที่ทำให้วิธีการเหล่านี้ไม่มีอยู่จริงสำหรับ ints

คำตอบ:


9

คำตอบสั้น ๆ ก็คือ Go เป็นผู้สืบทอดต่อ C และห้องสมุดคณิตศาสตร์มาตรฐานของ C นั้นได้กำหนดไว้เกือบเฉพาะในแง่ของค่าทศนิยมที่มีความแม่นยำเดี่ยวและสองครั้ง

คำตอบที่ยาวกว่าคือในภาษาที่พิมพ์แบบสแตติกโดยไม่มี polymorphism หรือฟังก์ชั่นโอเวอร์โหลดเช่น Go (หรือ C) คุณจะต้องจัดการกับประเภทของฟังก์ชั่นที่จะรับและส่งคืนล่วงหน้าและเมื่อคุณจะจัดการกับ ประเภทเฉพาะในห้องสมุดคณิตศาสตร์ของคุณมีการดำเนินการที่น่าสนใจมากขึ้นในจำนวนจุดลอยตัวกว่าจำนวนเต็ม เพื่อเลือกตัวอย่าง

  • สแควร์หรือ nth ของจำนวนเต็มหรือจำนวนจุดลอยมักจะไม่สามารถแสดงเป็นจำนวนเต็ม

  • ค่าที่น้อยมากที่น่าสนใจของฟังก์ชันยอดเยี่ยมนั้นสามารถแทนได้เป็นจำนวนเต็ม

  • การหารค่าทศนิยมต้องใช้การปัดเศษน้อยกว่าการหารจำนวนเต็ม

โปรดทราบว่านี่ไม่ได้เป็นเรื่องยากอย่างที่คิดถ้าค่าอินพุตของคุณเป็นจำนวนเต็ม - ค่าที่สำคัญสามารถถูกแปลงเป็นค่าทศนิยมด้วย typecast ง่ายๆและส่วนใหญ่ถูกต้อง

นั่นคือเรื่องราวของภาษาอย่าง Go หรือ C ภาษาอื่น ๆ มีตัวเลือกอื่น ๆ :

  • ภาษาที่พิมพ์แบบไดนามิกสามารถให้ฟังก์ชั่นห้องสมุดคณิตศาสตร์ที่รับหรือส่งคืนหลายประเภทขึ้นอยู่กับสิ่งที่พวกเขาถูกเรียกด้วยหรือไม่ว่าค่าตอบแทนจะเป็นตัวแทนเป็นจำนวนเต็ม

  • ภาษาที่มีฟังก์ชั่นการทำงานมากเกินไปสามารถให้ฟังก์ชั่นเดียวกันหลายรุ่นขึ้นอยู่กับประเภทที่คุณผ่าน (อย่างเคร่งครัดนี่คือฟังก์ชั่นหลายอย่างที่มีชื่อเดียวกันแตกต่างจากกรณีที่พิมพ์แบบไดนามิกด้านบน)

  • ภาษาที่มีความหลากหลายชนิด (เช่นภาษาเชิงวัตถุที่มีการสืบทอด) สามารถกำหนดซูเปอร์คลาส "Number" พร้อมคลาสย่อยสำหรับทั้งจำนวนเต็มและค่าจำนวนจุดลอยตัวจากนั้นกำหนดฟังก์ชันคณิตศาสตร์ในแง่ของคลาสตัวเลขนี้ วิธีการนี้มีความยืดหยุ่นอย่างมากของวิธีการใช้ภาษาแบบไดนามิกในขณะที่ยังคงรักษาความเข้มงวดของวิธีการแบบคงที่หรือการใช้งานมากเกินไป

อย่างไรก็ตาม Go ไม่มีคุณสมบัติเหล่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.