ການປະມວນຜົນ float number ໃນ embedded system

    embedded system ເປັນລະບົບທີ່ປະກອບດ້ວຍ chip ຫຼື board ຂະໜາດນ້ອຍ ຫຼື ເອີ້ນວ່າ ຕົວປະມວນຜົນຂະໜາດນ້ອຍ ປະກອບໄປດ້ວຍ: Processor, RAM, Battery, Memory… ເປັນຕົ້ນ. ສ່ວນໃຫ້ແລ້ວສ່ວນປະກອບເຫຼົ່ານັ້ນ ຂະໜາດຄວາມສາມາດໜ້ອຍຫຼາຍ.

    ໃນ embedded system ແມ່ນມີຂໍ້ຈຳກັດຫຼາຍດ້ານ ບໍ່ວ່າຈະເປັນຂະໜາດຂອງຕົວປະມວນຜົນ, battery… ສະນັ້ນໃນການຂຽນໂປແກມ ເຮົາຕ້ອງໃສ່ໃຈເຖີງລາຍລະອຽດອັນນ້ອນນິດຂອງມັນ. ແລະ ໃນບົດຄວາມນີ້ ແມ່ນຈະມາເວົ້າເຖີງ ການປະມວນຜົນ float number ໃນ embedded system.

     ໃນຕົວຈີງແລ້ວ ເຮົາສາມາດໃຊ້ float ຫຼື double, ແຕ່ມັນຈະໃຊ້ເວລາໃນການປະມວນຜົນດົນຫຼາຍ ຫຼື Time Consuming ນັ້ນເອງ.

    ເຄັດຫຼັບຫຼັກການ ແມ່ນໃຊ້ technique ປ່ຽນຈາກເລກຈຸດ float ເປັນ int…….  ເຮົາຈະເຮັດໄດ້ແນວໃດ ຕົວຢ່າງ ຢາກປ່ຽນຄ່າຂອງ cos(33 degree), ໃນນີ້ໃຊ້ 6 significant digits, ທີມີຄ່າ 0.83867 ໃຫ້ມາເປັນຄ່າ int.

    ເປັນຫຍັງຈັ່ງຈຳເປັນຕ້ອງປ່ຽນ? ລອງຈີນຕະນາການເບີ່ງຈັກຄິດໄລ່ເລກ ບາງເຄື່ອງສາມາດປະມວນຜົນໄດ້ 9 significant digits ຫຼື ບາງເຄື່ອງໄດ້ຮອດ 12 significant digits. ທັ້ງນີ້ ແມ່ນເນືອງມາຈາກ ຂໍ້ຈຳກັດທາງດ້ານ hardware ນັ້ນເອງ ແລະ ເຊັ່ນດຽວກັບໃນ embedded system ທີ່ມີຄຸນສົມບັດໜ້ອຍຫຼາຍ.

    ສະນັ້ນ ຈື່ງໄດ້ມີການປ່ຽນຈາກ float, double ມາເປັນ int ໂດຍການ x ແລກຈຳນວນໃດໜື່ງເຂົ້າໄປ ເພື່ອໃຫ້ອອກມາເປັນຄ່າ int. ໃນຕົວຢ່າງນີ້ ແມ່ນເອົາ float, double ຄູນກັບ 256 ແລ້ວເຮົາຈະໄດ້.

cos(33) = 0.83867

cos(33) = 0.83867 x 256 / 256.

cos(33) = 215/256

cos(33) = 215

     ເຮົາຈະເຫັນວ່າ: cos(33) = 215, ແນ່ນອນວ່າໂຕເລກນີ້ບໍ່ແມ່ນຄ່າຂອງ cos(33), ແຕ່ເປັນ 0.83867 ຫຼື ທຽບເທົ່າກັບ 215/256 (roundup).

ໝາຍເຫດ: ຖ້າມີການປ່ຽນຄ່າອື່ນໆຈາກ float ເປັນ int, ກໍ່ຄວນ ຄຸນ ຫານ ດ້ວຍຄ່າດຽວກັນໝົດຈະເປັນການດີ

    ເວລາເຮົານຳເອົາໄປໃຊ້ກະພຽງແຕ່ ຫານຄ່າດັງກ່າວ cos(33) ໃຫ້ກັບ 256 ໃນຂະນະທີ່ເອົາໄປຄິດໄລ່ກັບເລກພວກອື່ນ: ຕົວຢ່າງ Hough Transform, ຈະໝຸນpoint (33,45) ໄປ 33 degree. ເຮົາໄດ້ newX ກັບ newY ດັ່ງນີ້ (sin(33) = 139, cos(33) = 215).

R = \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \\ \end{bmatrix}

newX = (cos(33) * x – sin(33) * y) / 256

=> (215 * 33 – 139 * 45) / 256

=> 840 / 256

=> 3.281 = 3 (roundup).

newY =  (sin(33) * x + cos(33) * y) / 256

=> (139 * 33 + 215 * 45) / 256

=> 14262 / 256

=> 55,7 = 56 (roundup)

    ເຮົາຈະໄດ້ point ໃໝ່ຫຼັງຈາກໝຸນຈຸດນັ້ນດ້ວຍ 33 degree ແມ່ນ (3,56) ໂດຍໃຊ້ເທັນນິກນີ້, ຖ້າປຽນທຽບກັບການໃຊ້ຈັກຄິດໄລ່ ຈະໄດ້ຄ່າ (3.167, 55,7) ເຮົາຈະເຫັນວ່າ ຄ່າທີອອກມາແມ່ນໃກ້ຄຽງກັນຫຼາຍ, ແລະ ຖ້າເຮົາເອົາຄ່າທີ່ໄປ cast int ເຮົາຈະໄດ້ຄ່າດຽວກັນກັບ ເທັກນີກຂ້າງເທີງພໍເລີຍ.

    ສະຫຼຸບ: ວິທີການນີ້ແມ່ນໄດ້ຜົນດີຫຼາຍສຳຫຼັບ embedded system ພ້ອມທັງມີຄວາມຖືກຕ້ອງ accuracy ສູງ ແລະ ສາມາດໃຊ້ກັບ algorithm for embedded system ໄດ້ໂດຍ ມີປະສິດທີພາບໄວ້ສູງ ທາງດ້ານຄວາມໄວ ແລະ ຄົງຄ່າຄວາມຖືກຕ້ອງ.

Share via

Leave a Reply

Specify GooglePlus Client ID in Super Socializer > Social Login section in admin panel for GooglePlus Login to work