อะไรคือเหตุผลสำหรับผู้ประกอบการผลิตพลังงานของงูใหญ่ที่เชื่อมโยงกับด้านขวา?


9

ฉันกำลังเขียนโค้ดเพื่อแยกสตริงการแสดงออกทางคณิตศาสตร์และสังเกตว่าลำดับที่ตัวดำเนินการพลังงานถูกล่ามโซ่ถูกประเมินใน Python แตกต่างจากลำดับใน Excel

จากhttp://docs.python.org/reference/expressions.html :

"ดังนั้นในลำดับพลังงานและตัวดำเนินการ unaryhesized ตัวดำเนินการจะถูกประเมินจากขวาไปซ้าย (สิ่งนี้ไม่ได้ จำกัด ลำดับการประเมินสำหรับตัวถูกดำเนินการ): -1 * 2 ผลลัพธ์เป็น -1" *

ซึ่งหมายความว่าใน Python: 2**2**3ถูกประเมินเป็น2**(2**3) = 2**8 = 256

ใน Excel มันทำงานในลักษณะอื่น ๆ : 2^2^3ถูกประเมินเป็น(2^2)^3 = 4^3 = 64

ตอนนี้ฉันต้องเลือกการดำเนินการสำหรับตัวแยกวิเคราะห์ของฉันเอง คำสั่งซื้อของ Excel นั้นง่ายต่อการติดตั้งเพราะมันจะสะท้อนลำดับการประเมินผลของการคูณ

ฉันถามผู้คนรอบ ๆ สำนักงานว่าพวกเขารู้สึกอย่างไรกับการประเมิน2^2^3และได้รับคำตอบที่หลากหลาย

มีใครรู้บ้างเกี่ยวกับเหตุผลที่ดีหรือข้อเสนอแนะที่เป็นประโยชน์ต่อการใช้งาน Python หรือไม่? และถ้าคุณไม่มีคำตอบโปรดแสดงความคิดเห็นกับผลลัพธ์ที่คุณได้รับจากความรู้สึกลำไส้ - 64หรือ256?


มันไม่ยากที่จะนำไปใช้ อย่างไรก็ตาม parser ของคุณจะต้องสนับสนุนการเชื่อมโยงที่ถูกต้องไม่ทางใดก็ทางหนึ่งสำหรับสิ่งต่าง ๆ เช่นการมอบหมาย
marco-fiset

ใช่มันไม่ใช่ฉันได้ทำการติดตั้งจริง ๆ แต่ฉันกลับไปใช้ระเบียบ Excel เพราะหนึ่งในการใช้หลักของห้องสมุดของฉันคือการส่งออกสมการไปยัง Excel ดังนั้นจึงเหมาะสมกว่าที่จะยึดตามวิธีที่สมการทำงานอยู่ที่นั่น
Pieter Müller

คำตอบ:


10

เหตุผลที่ใช้เลขยกกำลังทางคณิตศาสตร์ในการคำนวณจากบนลงล่างคือวิธีอื่น ๆ ที่คุณเพิ่งได้รับการคูณของ exponents:

(((2^3)^4)^5) = 2^(3 * 4 * 5)

มันไม่ชัดเจนในรูปแบบคำตอบของคุณ .... แต่นั่นไม่ใช่สิ่งที่ exponents ทำงานในบริบทนั้นหรือไม่? ((2 ^ 3) ^ 4) = 8 ^ 4 = (2 ^ 3) * (2 ^ 3) * (2 ^ 3) * (2 ^ 3) = 2 ^ (3 + 3 + 3 + 3) = 2 ^ 12
Pureferret

3
ใช่แล้ว. ประเด็นของฉันคือคำสั่งซื้อสองคำสั่งที่คุณสามารถเลือกได้อย่างใดอย่างหนึ่งให้ผลตอบแทนที่คุณสามารถเขียนได้โดยไม่ต้องยกกำลังเลขชี้กำลัง ดังนั้นการเชื่อมโยงที่น่าสนใจคืออีกอันหนึ่ง
Andrea

14

วิกิพีเดีย (และครูคณิตศาสตร์ของฉัน) บอกฉันว่า: เลขชี้กำลังแบบซ้อนถูกใช้จากบนลงล่าง

สิ่งนี้สะท้อนให้เห็นถึงวิธีที่ Python ประเมินค่า Microsoft ผิด (อีกครั้ง)

และ Ruby ประเมินว่าเป็น Python ดังนั้นมันจึงถูกต้องอย่างไม่ต้องสงสัยเนื่องจาก Matz ไม่ผิด


4
ดูโพสต์ที่น่าสนใจนี้เกี่ยวกับการใช้ภาษา D ของผู้ปฏิบัติงานซึ่งรองรับการเชื่อมโยงที่ถูกต้อง
Pedro Romano

ฉันจำได้ว่า Visual Basic กำลังประเมินผลในลักษณะเดียวกัน แต่ฉันไม่แน่ใจว่าจะเพิ่มความน่าเชื่อถือให้กับวิธีการนี้หรือไม่ ;)
Xion

Microsoft เป็น "ผิด" ก็ต่อเมื่อล้มเหลวในการปฏิบัติตามข้อกำหนดบางอย่างที่อ้างว่าปฏิบัติตาม ภาษาต่าง ๆ ประเมินการดำเนินการทางคณิตศาสตร์แตกต่างกัน APL ถ้าฉันจำได้ถูกต้องทำให้การดำเนินการทั้งหมดเชื่อมโยงถูกต้อง ความไม่สอดคล้องกับสเปคที่แตกต่างกันนั้นน่ารำคาญ แต่ก็ไม่จำเป็นว่า "ผิด"
Keith Thompson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.