คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
- เล่น godbolt.org และ wandbox.org เพื่อใช้คอมไพเลอร์รุ่นล่าสุด โดยไม่ต้องลงในเครื่อง ไม่ต้อง maintain
** g++/clang++ ในลินุกซ์ไม่มี conio.h ครับ [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้KEYNOTE: What Everyone Should Know About How Amazing Compilers Are - Matt Godbolt [C++ on Sea 2019]
https://www.youtube.com/watch?v=w0sz5WbS5AM

CppCon 2018: Takatoshi Kondo “Wandbox: Online programming language testing environment”
https://www.youtube.com/watch?v=To-hsQeNmVE

- ลองเขียนเพื่อหาคำตอบว่า n เท่าไหร่จะทำให้ int และ unsigned long (uint64_t) เกิด overflow ได้คำตอบที่ผิด
** สังเกตความแตกต่างของ long ในวินโดวส์และลินุกส์ และทำไมควรใช้ int64_t แทน
- ถ้าเรียนฟังก์ชันแล้ว ลองเปลี่ยนลูปเป็น tail call recursive เปรียบเทียบ machine code ที่ผ่าน -O2 ว่าเหมือนกันหรือไม่ [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้uint64_t fac_helper(uint64_t rest, uint64_t result); uint64_t fac(uint64_t in);
- เปลี่ยนฟังก์ชันเป็น modern c++ lambda [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้*** เนื้อหาเป็น c++11 วันนี้ lambda ใน c++2a เปลี่ยนไปเล็กน้อยในทางยืดหยุ่นขึ้น
แต่หลัก ๆ ก็ยังคงเหมือนเดิม
Lambdas, Lambdas Everywhere
https://www.youtube.com/watch?v=rcgRY7sOA58

- ถ้าเรียน builtin array และ modulo แล้ว ลองคูณตาม radix แบบประถมเพื่อหา 52! ด้วยหลักแบบฐานสิบ (หลักหนึ่งมี 0-9)
- ถ้าเรียนเรื่อง bitwise shift แล้ว ลองคูณแบบใช้หลักแบบฐาน 256 (หลักหนึ่งมี 0 - FF) แล้วพอจะแสดงผล ค่อยแปลงผลลัพธ์กลับมาแสดงผลด้วยหลักแบบฐานสิบอีกที
- ถ้าเรียนเรื่อง pointer แล้ว ทำข้างบนด้วย standard algorithm std::for_each และ modern c++ lambda
- stand on shoulders of giants แล้วจะมัวมานั่งทำเองให้เหนื่อยทำไม เมื่อมี GMP, Boost ให้เล่น
** g++/clang++ ในลินุกซ์ไม่มี conio.h ครับ [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้KEYNOTE: What Everyone Should Know About How Amazing Compilers Are - Matt Godbolt [C++ on Sea 2019]
https://www.youtube.com/watch?v=w0sz5WbS5AM

CppCon 2018: Takatoshi Kondo “Wandbox: Online programming language testing environment”
https://www.youtube.com/watch?v=To-hsQeNmVE

- ลองเขียนเพื่อหาคำตอบว่า n เท่าไหร่จะทำให้ int และ unsigned long (uint64_t) เกิด overflow ได้คำตอบที่ผิด
** สังเกตความแตกต่างของ long ในวินโดวส์และลินุกส์ และทำไมควรใช้ int64_t แทน
- ถ้าเรียนฟังก์ชันแล้ว ลองเปลี่ยนลูปเป็น tail call recursive เปรียบเทียบ machine code ที่ผ่าน -O2 ว่าเหมือนกันหรือไม่ [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้uint64_t fac_helper(uint64_t rest, uint64_t result); uint64_t fac(uint64_t in);
- เปลี่ยนฟังก์ชันเป็น modern c++ lambda [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้*** เนื้อหาเป็น c++11 วันนี้ lambda ใน c++2a เปลี่ยนไปเล็กน้อยในทางยืดหยุ่นขึ้น
แต่หลัก ๆ ก็ยังคงเหมือนเดิม
Lambdas, Lambdas Everywhere
https://www.youtube.com/watch?v=rcgRY7sOA58

- ถ้าเรียน builtin array และ modulo แล้ว ลองคูณตาม radix แบบประถมเพื่อหา 52! ด้วยหลักแบบฐานสิบ (หลักหนึ่งมี 0-9)
- ถ้าเรียนเรื่อง bitwise shift แล้ว ลองคูณแบบใช้หลักแบบฐาน 256 (หลักหนึ่งมี 0 - FF) แล้วพอจะแสดงผล ค่อยแปลงผลลัพธ์กลับมาแสดงผลด้วยหลักแบบฐานสิบอีกที
- ถ้าเรียนเรื่อง pointer แล้ว ทำข้างบนด้วย standard algorithm std::for_each และ modern c++ lambda
- stand on shoulders of giants แล้วจะมัวมานั่งทำเองให้เหนื่อยทำไม เมื่อมี GMP, Boost ให้เล่น
▼ กำลังโหลดข้อมูล... ▼
แสดงความคิดเห็น
คุณสามารถแสดงความคิดเห็นกับกระทู้นี้ได้ด้วยการเข้าสู่ระบบ
กระทู้ที่คุณอาจสนใจ
อ่านกระทู้อื่นที่พูดคุยเกี่ยวกับ
การพัฒนาซอฟต์แวร์
C (ภาษาคอมพิวเตอร์)
วิศวกรรมคอมพิวเตอร์
วิทยาศาสตร์คอมพิวเตอร์
งานไอที
ช่วยเขียนโปรแกรมภาษา C หน่อยครับ