মাইক্রোকন্ট্রোলারগুলিতে ফিক্সড পয়েন্ট গাণিতিক


12

প্রায়শই আমরা আমাদের রোবোটগুলিতে জিনিসগুলি করতে মাইক্রোকন্ট্রোলার ব্যবহার করি তবে দশমিকের মধ্যে কিছু গণনা করা দরকার। ভাসমান পয়েন্ট ভেরিয়েবলগুলি ব্যবহার করা খুব ধীর, কারণ কোনও সফ্টওয়্যার ভাসমান পয়েন্ট লাইব্রেরি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয় (যদি না আপনার কাছে উচ্চ-মাইক্রোকন্ট্রোলার থাকে)। অতএব, আমরা সাধারণত স্থির পয়েন্ট গণিত ব্যবহার করি।

আমি যখনই এটি করি, আমি কেবল একটি পূর্ণসংখ্যা ব্যবহার করি এবং দশমিক স্থানটি কোথায় তা মনে রাখি। যাইহোক, এটি সবকিছু সামঞ্জস্যপূর্ণ তা নিশ্চিত করার জন্য কিছুটা যত্ন নেবে, বিশেষত যখন গণনাগুলি ভেরিয়েবলের সাথে জড়িত যেখানে দশমিক পয়েন্ট আলাদা জায়গায় থাকে।

আমি একটি নির্দিষ্ট পয়েন্ট atan2 ফাংশন বাস্তবায়ন করেছি, তবে আমি সীমিত নির্ভুলতার (16 বিট) প্রতি শেষ ড্রপটি চেপে ধরার চেষ্টা করছিলাম, আমি প্রায়শই দশমিক পয়েন্ট কোথায় ছিল তার সংজ্ঞাটি পরিবর্তন করতাম, এবং আমি এটি টুইট করার সাথে সাথে এটি পরিবর্তিত হত। তদ্ব্যতীত, আমার কাছে কিছুটা ধ্রুবক রয়েছে, কোয়াসিটি লুক-আপ টেবিল হিসাবে, যা তারা নিজেরাই কোথাও একটি সূচিত দশমিক পয়েন্ট রয়েছে।

আরও ভাল উপায় আছে কিনা তা জানতে চাই। কোনও লাইব্রেরি, বা ম্যাক্রোগুলির সেট রয়েছে যা স্থির বিন্দু ভেরিয়েবলের ব্যবহারকে সহজতর করতে পারে, মিশ্র ভেরিয়েবলগুলির মধ্যে গুণন এবং বিভাগকে সহজ করে তুলতে পারে এবং দশমিক সংখ্যা বা ধ্রুবক এক্সপ্রেশন ঘোষণার অনুমতি দেয় তবে সংকলনে স্বয়ংক্রিয়ভাবে কাঙ্ক্ষিত নির্দিষ্ট বিন্দু উপস্থাপনায় রূপান্তর করতে পারে সময়?


1
আমি মনে করি এটি আসলে স্ট্যাকওভারফ্লোয়ের জন্য ভাল কারণ সমাধানটি জেনেরিক এবং রোবোটিকের সাথে বেশি কিছু করার নয় is
শাহবাজ

1
@ জাকোব - নোট করুন যে এই দুটি প্রশ্নই গঠনমূলক না বলে বন্ধ ছিল।
মার্ক বুথ

1
এটি এমন এক ধরণের জিনিস যা এম্বেড থাকা সিস্টেমগুলির জন্য সি ++ কে খুব দরকারী করে তুলবে। টেমপ্লেটগুলি স্বয়ংক্রিয়ভাবে সঠিক এবং অনুকূল কোড উত্পন্ন করবে।
রকেটম্যাগনেট

1
আপনার আটান ফাংশনটি কি আমি একবার দেখতে পারি? আমি আমার একাডেমিক গবেষণায় ভাসমান-থেকে-স্থির-পয়েন্ট রূপান্তর সমস্যাটি মোকাবিলার চেষ্টা করছি এবং আমি এটির জন্য ক্র্যাক করে খুশি হব।
জো হাস

1
আরডুইনো (একটি এভিআর মাইক্রো) ভাষার @ronalchn পার্টস সি ++ এ প্রয়োগ করা হয়েছে। এছাড়া একটি হল এভিআর সি ++ লাইব্রেরি । এবং এই থ্রেড যা সংকলক ব্যবহার করতে হবে।
embedded.kyle

উত্তর:


7

এটি দুর্দান্ত লাগবে যদি আমরা সংস্থাপকটিকে প্রতিটি নির্দিষ্ট-পয়েন্ট ইনপুট ভেরিয়েবলের পরিসর এবং যথার্থতা বলতে পারতাম (সম্ভবত একই স্থানে কোনও দুটিই মূলত বিন্দু রাখেনি), এবং এটি স্বয়ংক্রিয়ভাবে - সংকলনের সময় - সঠিক পরিসরটি ব্যবহার করে এবং মধ্যবর্তী মান এবং চূড়ান্ত মানগুলির গণনার একটি সিরিজে নির্ভুলতা এবং পুনরুদ্ধারকরণ ক্রিয়াকলাপ। আমি গুজব শুনেছি যে এটি অ্যাডা প্রোগ্রামিং ভাষায় বা সি ++ টেম্পলেটগুলিতে করা সম্ভব হতে পারে ।

হায়, আমি সবচেয়ে নিকটতম দেখেছি নির্দিষ্ট পয়েন্ট গণিত গ্রন্থাগার যা আপনাকে, প্রোগ্রামারকে ম্যানুয়ালি সঠিক উপস্থাপনা চয়ন করতে এবং ম্যানুয়ালি যাচাই করতে হবে যে প্রতিটি অপারেশন পর্যাপ্ত পরিসর এবং নির্ভুলতা বজায় রাখে। কখনও কখনও তারা মিশ্র ভেরিয়েবলগুলির মধ্যে গুণ এবং বিভাগকে সহজ করে তোলে। যেমন:


এটি প্রায় অবশ্যই সি ++ টেম্পলেট ব্যবহার করে করা সম্ভব।
রকেটম্যাগনেট

আমি আসলে আপনার "ভালো লাগলে ভাল লাগবে ..." মন্তব্যের মতো কিছু নিয়ে কাজ করছি। এটি জিসিসির জন্য একটি প্লাগইন যা ভাসমান-পয়েন্ট সি কোডটিকে ফিক্স-পয়েন্টে রূপান্তর করে, বাইনারি পয়েন্টের সমস্ত অবস্থানের জন্য অনুকূলিত করে। আমার একটি এসিএম জার্নালে জমা দেওয়া একটি কাগজ, এবং অন্য একটি প্রস্তুতির জন্য। অ্যাটান ফাংশনের জন্য আপনার কাছে সি কোড থাকলে আমি এটিকে একটি শট দিতে পেরে খুশি হব ... আমি আপনাকে সি কোডটি ফিরিয়ে দিতে পারব যা পূর্ণসংখ্যার ভেরিয়েবল ব্যবহার করে এবং ফিক্স-পয়েন্টের স্টাফগুলি করে।
জো হাস

আমার চেয়ে অনেক বেশি সম্পূর্ণ উত্তরের জন্য +1। মার্ক বুথের মন্তব্যে সম্বোধনের জন্য উত্স কোডের অনুরোধ করার জন্য আমি কোনও জায়গার একটি লিঙ্ক অন্তর্ভুক্ত করার জন্য আমার লিঙ্কটি সম্পাদনা করেছি। আপনি নিজের লিঙ্কটিও আপডেট করতে চাইতে পারেন। আমি নিজে এটি করব তবে প্রস্তাবিত সম্পাদনাটি সারিতে রয়েছে এবং আমাকে অবরুদ্ধ করছে।
embedded.kyle

1
@ রকেটম্যাগনেট টেমপ্লেটগুলি ব্যবহার করে স্থির পয়েন্টগুলি বাস্তবায়িত করা, ফিক্সডপয়েন্টগুলি দেখুন (অস্বীকৃতি: আমি এটি লিখেছি এবং এটি এখনও খুব 'তরুণ')।
ফারাপ


2

আমি তাদের ফিক্সড পয়েন্ট ডিএসপিগুলিতে ভার্চুয়াল ভাসমান-পয়েন্টটি প্রয়োগ করতে টিআই আইকিউথ লাইব্রেরি ব্যবহার করেছি ।

টেক্সাস ইন্সট্রুমেন্টস টিএমএস 320 সি 28 এক্স আইকিউথ লাইব্রেরি সি / সি ++ প্রোগ্রামারদের জন্য নির্বিঘ্নে টিএমএস 320 সি 28 এক্স ডিভাইসগুলিতে স্থির বিন্দু কোডটিতে একটি ভাসমান-পয়েন্ট অ্যালগরিদমকে পোর্ট করার জন্য অত্যন্ত অনুকূল এবং উচ্চতর নির্ভুল গাণিতিক ফাংশনগুলির সংকলন। এই রুটিনগুলি সাধারণত গণনামূলকভাবে নিবিড় রিয়েল-টাইম অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যেখানে অনুকূল প্রয়োগের গতি এবং উচ্চ নির্ভুলতা গুরুত্বপূর্ণ। এই রুটিনগুলি ব্যবহার করে আপনি স্ট্যান্ডার্ড এএনএসআই সি ভাষায় লিখিত সমমানের কোডের তুলনায় যথেষ্ট দ্রুত কার্যকর করতে পারবেন execution তদতিরিক্ত, প্রস্তুত-ব্যবহারের উচ্চ নির্ভুলতা ফাংশন সরবরাহ করে, টিআই আইকিউথ লাইব্রেরি আপনার ডিএসপি অ্যাপ্লিকেশন বিকাশের সময়কে উল্লেখযোগ্যভাবে সংক্ষিপ্ত করতে পারে।

এটি কিছু টিআই নির্দিষ্ট স্টাফ ব্যবহার করে তবে আমি অন্যান্য কোডটি মাইক্রোকন্ট্রোলারগুলিতে ভার্চুয়াল ভাসমান-পয়েন্ট গণিত বাস্তবায়নের জন্য সেই কোডটিকে বেস হিসাবেও ব্যবহার করেছি। এটি বন্দরে কিছুটা সময় নেয় তবে এটি স্ক্র্যাচ থেকে শুরু করার চেয়ে অনেক সহজ।


@ ডাউনভোটার আমার উত্তরটিতে কী ভুল ছিল তা মন্তব্য করার জন্য যত্নশীল?
embedded.kyle

+1: এই লাইব্রেরিটি তিনি এখন যা ব্যবহার করছেন তার চেয়ে ভাল ("কেবলমাত্র একটি পূর্ণসংখ্যা ব্যবহার করুন")। এটি মূল প্রশ্নটি জিজ্ঞাসা করা সমস্ত কিছুই করে না , তবে আমি মনে করি যে এর মতো উত্তর (কার্যকর, তবে একটি সম্পূর্ণ সমাধান নয়) ডাউনভোটের যোগ্য নয় - যদি একটি সম্পূর্ণ সমাধান আসলে উপস্থিত না হয় (তবে আমি এই ক্ষেত্রে সন্দেহ করি) )।
ডেভিড ক্যারি

আমার কাছে মনে হয়েছে যে কোনও উত্তর যা একক পরিসরের ডিভাইসের সাথে সুনির্দিষ্ট এবং কেবল বিয়ারের মতো বাকী নয় বরং ভবিষ্যতে দর্শনার্থীদের জন্য সীমিত ব্যবহার।
মার্ক বুথ

@ মার্কবুথ আমি সি 28x লাইব্রেরি থেকে লিংকটি সি 64x লাইব্রেরিতে পরিবর্তন করেছি। আপনি যদি এই লিঙ্কটি অনুসরণ করেন তবে আপনি উত্স কোডের জন্য অনুরোধ করতে পারেন। অ্যাক্সেস পেতে আপনার একটি সংস্থা বা বিশ্ববিদ্যালয়ের ইমেল দরকার। বিয়ার এবং বক্তৃতা হিসাবে এখনও বিনামূল্যে । আপনাকে কেবল আপনার হাত তুলতে হবে এবং কথা বলার আগে আপনাকে ডাকা হবে বলে অপেক্ষা করতে হবে। কিছুটা বিরক্তিকর, তবে একবার আপনার সোর্স কোডটি হয়ে গেলে এটি আপনার পছন্দসই কোনও প্রসেসরের সাথে মানিয়ে নেওয়া যায়।
embedded.kyle

ধন্যবাদ @ এম্বেডড.কাইল উত্স কোডটি কেবল বাইনারিগুলির চেয়ে অবশ্যই ভাল, তবে এখনও লাইসেন্সটি আপনাকে সীমিত উপায়ে এটি ব্যবহার করতে দেয় তবে সাধারণ ব্যবহার খুব কম। সি 6 এক্স সফ্টওয়্যার লাইব্রেরি পৃষ্ঠা অনুসারে সেই উত্সটি কেবলমাত্র টিআই বাণিজ্যিক লাইসেন্সের অধীনে প্রকাশিত হয়েছে , যা প্রায় স্পষ্টভাবে বক্তৃতায় মুক্ত নয় ।
মার্ক বুথ

1

বাইনারি স্কেলিং (ওরফে বি-স্কেলিং) এর অনেকগুলি বাস্তবায়ন রয়েছে (এমন কোনও লাইব্রেরি যা আমি অবিলম্বে অবগত হই )

এতে আপনি দশমিক বিন্দুটি উপরে বা নীচে সরানোর জন্য শিফট ব্যবহার করে দশমিক বিন্দু যেখানে থাকে তার মানসিক নোট (বা আরও ভাল, কোড নথি করুন ...) রাখুন।

আমি প্রতিরক্ষা প্রকল্পগুলিতে এসেম্বলারের মধ্যে বি-স্কেলিং ব্যবহার করেছি, এমনকি ক্ষুদ্রতম সিপিইউগুলিতেও অন্য যে কোনও কিছুর জন্য এটির উপযুক্ততার পক্ষে প্রমাণ দেওয়া যেতে পারে ...


সম্ভবত এটির মতো কিছু, তবে আমি কখনই এটিকে বি-স্কেলিং হিসাবে উল্লেখ করে দেখিনি। আমি এটিকে স্থির বিন্দু হিসাবে ভাবি
দশমিকটি

0

আপনার মনে রাখতে যেখানে "বিন্দু" হয় একটি পূর্ণসংখ্যা ব্যবহার করেন, তাহলে তারা কোন ধরনের ফ্লোটিং পয়েন্ট গাণিতিক ব্যবহার করে। স্থির পয়েন্ট, সত্যিই নির্দিষ্ট পয়েন্ট আছে।

atancosπ-π

এটি আপনার অ্যাপ্লিকেশনটির প্রয়োজনীয় মানগুলির পরিসীমাটির উপর নির্ভর করে তবে আপনি একটি নির্দিষ্ট পয়েন্ট প্রতিনিধিত্বতে সম্পূর্ণরূপে যেতে চান। এটি উদাহরণস্বরূপ, এই জাতীয় সংখ্যা রাখার পরিবর্তে:

struct num
{
    uint16_t number;
    uint16_t decimal_point;
};

যেখানে numberপুরো সংখ্যা এবং decimal_pointবলছেন যেখানে দশমিক বিন্দু হয়, তাহলে আপনি এটা ভালো সংরক্ষণ করতে পারেন:

struct num
{
    uint16_t integer;
    uint16_t fraction;
};

পুরো সংখ্যাটি যেখানে integer.fractionএকই মেমরির ব্যবহার রয়েছে, মানগুলির উচ্চতর পরিসীমা এবং সাধারণভাবে ব্যবহার করা সহজ।


আসলে দশমিক পয়েন্ট সংরক্ষণ করে এটি আরও ভাসমান পয়েন্টের মতো করে তোলে। সাধারণত দশমিক পয়েন্ট সংকলনের সময় সংজ্ঞায়িত করা হয়, এবং আপনি আপনার ক্রিয়াকলাপের উপর নির্ভর করে উপস্থাপনের মধ্যে পরিবর্তন করেন।
Jakob

ভেরিয়েবলের মতো সঞ্চিত রাখার অর্থ আমি বোঝাতে চাইছি না, তার মানে আমি মনে করি ফলাফলটি কীভাবে ব্যাখ্যা করতে হবে তা হিসাবে আমি মনে করি (দশমিক বিন্দুটি কোথায় তা জেনে)
রোনালঞ্চ

@ অ্যারোনালচান, আমি দেখছি। তুমি ঠিক এরকম কিছু বোঝাতে চাও #define? আমি ভেবেছিলাম আপনি আসলে এটি সঞ্চয় করে রেখেছেন এবং আপনার নম্বরটি কত বড় বা ছোট তার ভিত্তিতে এটি পরিবর্তিত হতে পারে।
শাহবাজ

@ অ্যারাল্যাঞ্চন - আপনি কি বি-স্কেলিংয়ের কথা ভাবছেন? (আমার উত্তর দেখুন)
অ্যান্ড্রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.