স্থির আকারের ভাসমান পয়েন্টের ধরণের


92

ইন stdint.h(C99), বুস্ট / cstdint.hpp , এবং cstdint(সি ++ 0x) হেডার নেই অন্যান্যের মধ্যে টাইপ int32_t

একই ধরণের স্থির আকারের ভাসমান পয়েন্টের ধরণগুলি রয়েছে? এরকম কিছু float32_t?


4
তোমার এমন কিছু দরকার কেন?
আরাক

41
আপনার যখন এমন একটি ভাসমান-পয়েন্ট মান সহ একটি ডেটা কাঠামো থাকে এবং আপনি এটির আকারটি ঠিক কী তাও জানতে চান like
ভিড়

4
@ মোব্রুল: যদি আকারটি কী তা জানার দরকার হয় তবে আপনি sizeofঅপারেটরটি ব্যবহার করেন । এরকম একটি প্রকার কার্যকর হবে যখন একটি অ্যালগরিদমের প্রয়োজন হয় এটি একটি নির্দিষ্ট নির্দিষ্ট আকারের।
স্টিফেন ক্যানন

6
@ স্টেফেন ক্যানন - হ্যাঁ, আপনি যখন আকারটি কী তা গ্যারান্টি দিতে চান। বলুন যে আপনার ডেটা স্ট্রাকচারের একটি উদাহরণ 64 বিটের মধ্যে মাপসই হবে এবং মান দ্বারা কিছু বাহ্যিক লাইব্রেরিতে পাঠানো যেতে পারে।
ভিড়

7
@ স্টেফেনক্যানন ক্রস-প্ল্যাটফর্ম সিরিয়ালাইজেশন লাইব্রেরি বিবেচনা করুন। sizeofধারাবাহিকভাবে মার্শালিং এবং নিরবচ্ছিন্ন ভাসমান ধরণের সমস্যা সমাধানে কীভাবে ব্যবহার করা যেতে পারে?
কাইল স্ট্র্যান্ড

উত্তর:


48

বর্তমানে সি বা সি ++ স্ট্যান্ডার্ডগুলিতে এর মতো কিছুই নেই। আসলে, এমন কোনও গ্যারান্টি নেই যা মোটেই floatবাইনারি ফ্লোটিং-পয়েন্ট ফর্ম্যাট হবে।

কিছু সংকলক গ্যারান্টি দেয় যে floatপ্রকারটি আইইইই -754 32 বিট বাইনারি ফর্ম্যাট হবে। কিছু না। বাস্তবে, floatআসলে বেশিরভাগ এম্বেড থাকা প্ল্যাটফর্মগুলিতে আইইইই -754 singleটাইপ হয় যদিও বিস্তৃত বিন্যাসে প্রকাশিত মূল্যায়নের কিছু সংকলক সম্পর্কে সাধারণ সতর্কতা প্রযোজ্য।

আইইইই--৫৪ সংশোধনীর জন্য ২০০৮ সালের সি ল্যাঙ্গুয়েজ যুক্ত করার বিষয়ে একটি কার্যনির্বাহী গ্রুপ আলোচনা করছে, যা এই জাতীয় টাইপডেফ যুক্ত করার পরামর্শ দেওয়ার বিষয়ে বিবেচনা করতে পারে। যদি এটি সিতে যুক্ত করা হয়, আমি আশা করি সি ++ মানকটি শেষ পর্যন্ত অনুসরণ করবে ...


4
আইইইই--75৪ নির্বিশেষে বা না, এটি এখনও এন্ডিয়ান পোর্টেবিলিটি সমস্যাগুলি প্রতিরোধ করবে না।
বি বি

4
@ পেট্রো: ভাষা পরিবর্তন করা আপনার হার্ডওয়ারের সামঞ্জস্যকে প্রভাবিত করবে না, এটি কেবল কিছু হার্ডওয়্যারকে সম্মতি থেকে বিরত রাখবে। কোনও আইইইই এফপি গ্যারান্টি বহন করতে সহায়তা করবে?
পটোটোওয়াতর

4
@ পোটাটোসওয়টার: এটি হার্ডওয়্যার বিক্রেতাদের সম্মতিযুক্ত সমাধান সরবরাহ করতে উত্সাহিত করবে। যদি কোনও অংশ নরম-ফ্লোট লাইব্রেরি হ্যাক এবং পার্ট বি না করে স্ট্যান্ডার্ড সি সমর্থন করে তবে অংশটি এটির জন্য এটি বাজার সুবিধা।
স্টিফেন ক্যানন

4
@ পোটাটোসওয়টার: (প্রায়) কেউ হার্ডওয়ারের গতি সম্পর্কে চিন্তা করে না। আমরা হার্ডওয়্যারে চলমান সফ্টওয়্যারটির গতি সম্পর্কে যত্নশীল। সফ্টওয়্যারটি চলমান যদি হার্ডওয়্যারটি মানক হিসাবে ধরে থাকে এবং সফ্টওয়্যারটি কী প্ল্যাটফর্মটি চলছে তার উপর নির্ভর করে 15 টি বিভিন্ন বিশেষ কেস সনাক্ত করতে এবং প্যাচিংয়ের প্রয়োজন নেই তবে দ্রুত হতে পারে।
স্টিফেন ক্যানন

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

30

জানতে চাইলে আপনার কিনা float আইইইই 32-বিট টাইপ , পরীক্ষা করুন std::numeric_limits<float>::is_iec559। এটি একটি সংকলন-সময় ধ্রুবক, কোনও ফাংশন নয়।

আপনি যদি আরও বুলেটপ্রুফ হতে চান std::numeric_limits<float>::digitsতবে এগুলি আইইইই স্ট্যান্ডার্ড ডাবল-স্পষ্টতা ব্যবহার করে স্নেহকূপে ব্যবহার করছেন না তা নিশ্চিত করে দেখুনfloat । এটি 24 হওয়া উচিত।

যখন এটি আসে long double পরীক্ষা করা আরও গুরুত্বপূর্ণ digitsকারণ এখানে কয়েকটি আইইইই ফর্ম্যাট রয়েছে যা এটি যুক্তিসঙ্গতভাবে হতে পারে: 128 বিট (অঙ্কগুলি = 113) বা 80 বিট (অঙ্কগুলি = 64)।

এটি float32_tযেমন ব্যবহার করা ঠিক ততটা কার্যকর হবে না কারণ আপনি সাধারণত যদি ভেসেটিং পয়েন্ট হার্ডওয়্যার ব্যবহার করতে চান তবে পাওয়া যায় এবং কোনও সফ্টওয়্যার বাস্তবায়নে পিছিয়ে না পড়ুন।


long doubleOS X এর (উভয় 32 বিট এবং 64-বিট Intel) এ বিন্যাস ঠিক আইইইই-754 ডবল বর্ধিত অল্প endian অনুক্রমে সঞ্চিত ফরম্যাট। এ সম্পর্কে মজাদার কিছুই নয়। বাইটস 0-7 হ'ল তাৎপর্যপূর্ণ ক্ষেত্রটি ধরে রাখে এবং 8 এবং 9 এর বাইটগুলি খাঁজ এবং সাইন ক্ষেত্রগুলিকে ধারণ করে।
স্টিফেন ক্যানন

@ স্টিফেন: এটি সুসংবাদ: ভি)। এটি কি আমি পোস্ট করা সংখ্যার সাথে একমত?
পোটোটোওয়াতর

4
মনে রাখবেন যে ডাবল বর্ধিত (অন্যান্য 754 ফর্ম্যাটগুলির বিপরীতে) এর সুস্পষ্ট নেতৃস্থানীয় তাত্পর্য এবং বিট রয়েছে, তাই 5.0Lএর তাত্পর্য রয়েছে a000000000000000। এর নিরপেক্ষ ঘাঁটিঘটিতটি +২ হয় এবং দ্বিগুণ প্রসারিত এক্সপোঞ্জার পক্ষপাতিত্ব হয় 3fff, সুতরাং 5.0L এর পক্ষপাতদুষ্ট প্রকাশক হয় 4001। লিটল-এন্ডিয়ান অর্ডারে সঞ্চিত হওয়ার পরে আসল বাইট প্যাটার্নটি হ'ল 00 00 00 00 00 00 00 a0 01 40এবং যদি আপনি দেখতে পান যে দুটি লিটল এন্ডিয়ান 64৪-বিট ইন্টিজার হিসাবে দেখা যায়, আপনি ঠিক কী দেখতে পেয়েছেন তা দেখতে পাবেন।
স্টিফেন ক্যানন

(*) হার্ডওয়্যার ইনটেল দ্বারা প্রয়োগ হিসাবে দ্বিগুণ প্রসারিত, হয়। দ্বিগুণ প্রসারিত ফর্ম্যাটটি আসলে IEEE-754 (1985) এর অন্যান্য দুটি বুনিয়াদী বিন্যাসের পিন করা হয়নি।
স্টিফেন ক্যানন

@ স্টেফেন: আমি বেশ নিশ্চিত যে 4001লিটল-এন্ডিয়ান এ 01 40 00 00 ...অন্য কিছু না হলে, কমপক্ষে উল্লেখযোগ্য বাইটটি প্রথম আসে। আমি অনুক্রমটি a0 01 40কোথাও কোথাও কোথাও প্রদর্শিত হবে বলে আশা করি (যদি তারা কেবল একটি ঘূর্ণন সম্পাদন করে) তবে আপনি কেন ব্যাখ্যা করেছেন a0এবং কেন 01 40সম্পূর্ণ পৃথক অর্ধে রয়েছেন তা আমি মনে করি না ।
পোটোটোওয়াতর

18

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

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

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


"আমার প্ল্যাটফর্মে তারা কয়টি বিট রয়েছে তা সঠিকভাবে না জানলে আমি ব্যক্তিগতভাবে অস্বস্তি বোধ করি। আমি আরও কিছু যোগাযোগের চ্যানেলে এগুলি অন্য প্ল্যাটফর্মে স্থানান্তর করতে চাইছি more" - আপনি বোঝাতে চাইছেন আপনি টেক্সট ফাইল ফর্ম্যাট ব্যবহার করছেন? এগুলির সাথে ফাইলের আকারের অসুবিধা রয়েছে: একটি 32 ফ্লোটের 4 বাইট প্রয়োজন; পাঠ্য আকারে এগুলি কেবলমাত্র চার অঙ্কের সংখ্যার প্রতিনিধিত্ব করতে পারে ...
পাইট্রো

3

ভাষাতে নিম্নলিখিত ধরণের যুক্ত করার প্রস্তাব রয়েছে:

decimal32
decimal64
decimal128

যা একদিনের মাধ্যমে অ্যাক্সেসযোগ্য হতে পারে #include <decimal>

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3871.html


4
মঞ্জুর, দশমিক প্রকারগুলি IEEE 754 ভাসমান-পয়েন্ট ধরণের নয়।
মাইক ডিসিমোন

অপেক্ষা! decimal2424 বিট নমুনা সহ wav ফাইলগুলি পড়ার মতো জিনিসগুলিও আমাদের তৈরি করা দরকার !
tjwrona1992
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.