ในการตอบคำถามไตเติ้ลของคุณ "ภาษาการเขียนโปรแกรมใช้ตัวแปรตามที่อยู่ในคณิตศาสตร์หรือไม่": C, C #, Java, C ++ และภาษาอื่น ๆ ของ C สไตล์ใช้ตัวแปรในวิธีที่พวกเขาใช้ในคณิตศาสตร์
คุณเพียงแค่ต้องใช้ == แทนที่จะเป็น =
ถ้าฉันใช้ต้นฉบับของคุณ
root(square(x)) = abs(x)
จากนั้นฉันสามารถแปลให้เป็น C # โดยตรงโดยไม่มีการเปลี่ยนแปลงใด ๆ นอกจากไวยากรณ์
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
สิ่งนี้จะประเมินว่าเป็นจริงสำหรับค่าใด ๆ ของ x ตราบเท่าที่ x กำลังสองน้อยกว่าค่าสูงสุดสำหรับประเภทข้อมูลที่คุณใช้
(Java จะคล้ายกันอย่างไม่มีการลด แต่ฉันเชื่อว่า Math namespace แตกต่างกันเล็กน้อย)
บิตถัดไปนี้จะไม่สามารถคอมไพล์ใน C # ได้เนื่องจากคอมไพเลอร์ฉลาดพอที่จะรู้ว่าฉันไม่สามารถกำหนดการส่งคืนการดำเนินการหนึ่งให้กับการดำเนินการอื่นได้
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
ความไม่สามารถเปลี่ยนแปลงได้ไม่เกี่ยวข้องกับสิ่งนี้ คุณยังคงต้องกำหนดค่าในภาษาที่ไม่เปลี่ยนรูปแบบและเป็นไปได้อย่างสมบูรณ์ว่าภาษาที่ระบุอาจเลือกทำเช่นนี้โดยใช้ = เป็นผู้ดำเนินการ
การพิสูจน์จุดเพิ่มเติมการวนซ้ำนี้จะทำงานจนกว่าคุณจะหมดคุณค่าทางกฎหมายของ x และรับข้อยกเว้นมากเกินไป:
while (Math.Sqrt(Math.Pow(x, 2)) == Math.Abs(x))
{
++x;
System.Console.WriteLine(x);
}
นี่คือเหตุผลที่นักคณิตศาสตร์เกลียดการใช้ = สำหรับการมอบหมาย มันทำให้พวกเขาสับสน ฉันคิดว่าสิ่งนี้ทำให้คุณสับสน นำตัวอย่างของคุณ
y = (x**2)**.5
x *= 2
assert y == abs(x)
เมื่อฉันเปลี่ยนมันเป็นพีชคณิตฉันจะได้:
abs (2x) = root (x ^ 2)
ซึ่งแน่นอนว่าไม่เป็นความจริงสำหรับค่าอื่น ๆ นอกเหนือจาก 0 การไม่เปลี่ยนรูปจะช่วยให้คุณประหยัดจากข้อผิดพลาดในการเปลี่ยนค่าของ x เมื่อคุณเพิ่มขั้นตอนพิเศษระหว่างการประเมินด้านซ้ายมือและด้านขวามือของสมการดั้งเดิม มันไม่ได้เปลี่ยนวิธีที่คุณประเมินนิพจน์