c - what - কেন সি স্বাক্ষরিত floats আছে না?




what is data type (8)

একটি বর্গক্ষেত্র-রুট অবশ্যই একটি নেতিবাচক সংখ্যা ফিরে না। নেতিবাচক float মান কোন অর্থ নেই যেখানে পাশাপাশি অন্যান্য জায়গা আছে। একটি স্বাক্ষরিত ভাসা জন্য পারফেক্ট প্রার্থী।

C99 জটিল সংখ্যার সমর্থন করে এবং একটি ধরনের জেনারিক আকার sqrt, তাই sqrt( 1.0 * I) নেতিবাচক হবে।

মন্তব্যকারীরা একটি সামান্য চকচকে হাইলাইট করেছে, এতে আমি ফাংশনটির পরিবর্তে টাইপ-জেনেরিক sqrt ম্যাক্রো উল্লেখ করছিলাম, এবং এটি জটিল উপাদানটিকে জটিল উপাদানতে ছিন্ন করে একটি স্কেলার ভাসমান বিন্দু মান প্রদান করবে:

#include <complex.h>
#include <tgmath.h>

int main () 
{
    complex double a = 1.0 + 1.0 * I;

    double f = sqrt(a);

    return 0;
}

এটিতে কোনও মস্তিষ্কের বাহক রয়েছে, যেহেতু কোন জটিল সংখ্যার sqrt এর প্রকৃত অংশটি ইতিবাচক বা শূন্য, এবং sqrt (1.0 * I) sqrt (0.5) + sqrt (0.5) * আমি -1.0 নয়।

আমি জানি, প্রশ্ন অদ্ভুত বলে মনে হচ্ছে। প্রোগ্রামাররা কখনও কখনও অনেক চিন্তা। অনুগ্রহ করে পড়ুন ...

সিআই ব্যবহার করে signed এবং unsigned পূর্ণসংখ্যা অনেক। আমি একটি অচেনা পরিবর্তনশীল একটি স্বাক্ষরিত পূর্ণসংখ্যা বরাদ্দ মত জিনিস না যদি কম্পাইলার আমাকে সতর্ক করে যে। আমি স্বাক্ষরিত পূর্ণসংখ্যা এবং আরো অনেক কিছু দিয়ে সাইন তুলনায় আমি সতর্কতা পেতে।

আমি এই সতর্কতা পছন্দ। তারা আমাকে আমার কোড সঠিক রাখতে সাহায্য।

কেন আমরা floats জন্য একই বিলাসিতা না? একটি বর্গক্ষেত্র-রুট স্পষ্টভাবে একটি নেতিবাচক নম্বর ফিরে না। নেতিবাচক float মান কোন অর্থ নেই যেখানে পাশাপাশি অন্যান্য জায়গা আছে। একটি স্বাক্ষরিত ভাসা জন্য পারফেক্ট প্রার্থী।

BTW - আমি ভাস্কর্য থেকে সাইন বিট অপসারণ করে পেতে পারে যে স্পষ্টতা এক অতিরিক্ত বিট সম্পর্কে সত্যিই আগ্রহী নই। আমি এখন ডান হিসাবে float গুলি সঙ্গে সুপার খুশি। আমি কখনও কখনও স্বতঃস্ফূর্ত হিসাবে একটি ফ্লোট চিহ্নিত করতে চাই এবং একই ধরনের সতর্কতাগুলি পেতে পারি যা আমি পূর্ণসংখ্যার সাথে পাই।

আমি এমন কোনও প্রোগ্রামিং ভাষা সম্পর্কে সচেতন নই যা স্বাক্ষরিত ভাসমান-বিন্দু সংখ্যার সমর্থন করে।

কোন ধারণা কেন তারা বিদ্যমান না?

সম্পাদনা করুন:

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


(একপাশে, পার্ল 6 আপনাকে লিখতে দেয়

subset Nonnegative::Float of Float where { $_ >= 0 };

এবং তারপরে আপনি অন্য কোন ধরনের মত Nonnegative::Float ব্যবহার করতে পারেন।)

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

[সম্পাদনা]

সি সমাবেশ মত হল: আপনি কি দেখতে পাবেন ঠিক কি। একটি অন্তর্নির্মিত "আমি এই ফ্ল্যাট আপনার জন্য অনাকাঙ্ক্ষিত চেক করব" তার নকশা দর্শনের বিরুদ্ধে যায়। আপনি যদি সত্যিই এটি চান তবে আপনি assert(x >= 0) বা অনুরূপ যুক্ত করতে পারেন, তবে আপনাকে তা স্পষ্টভাবে করতে হবে।


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

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


আমি এটা IEEE ভাসমান পয়েন্ট স্পেসিফিকেশন শুধুমাত্র স্বাক্ষরিত হয় যে উপর নির্ভর করে এবং যে অধিকাংশ প্রোগ্রামিং ভাষা তাদের ব্যবহার।

উইকিপিডিয়া articla ieee ভাসমান বিন্দু সংখ্যা

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


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


আমি সি কম্পাইলার দ্বারা লক্ষ্যবস্তু অন্তর্নিহিত প্রসেসর স্বাক্ষরিত ভাসমান বিন্দু সংখ্যা সঙ্গে ডিল করার একটি ভাল উপায় নেই কারণ এটি সন্দেহ।


সি / সি ++ এ স্বাক্ষরিত এবং স্বাক্ষরিত পূর্ণসংখ্যার মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে:

value >> shift

স্বাক্ষরিত মান শীর্ষ বিট অপরিবর্তিত (সাইন প্রসারিত) ছেড়ে, স্বাক্ষরিত মান শীর্ষ বিট পরিষ্কার।

কোন স্বাক্ষরিত ভাসা নেই কারণ কোন নেতিবাচক মান নেই যদি আপনি দ্রুত সব ধরণের সমস্যার মধ্যে চালানো হয়। এই বিবেচনা:

float a = 2.0f, b = 10.0f, c;
c = a - b;

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

float a = 2.0f, b = 10.0f, c = 20.0f, d = 3.14159f, e;
e = (a - b) / d + c;

এটি 2 এর সম্পূরক সিস্টেমের প্রকৃতির কারণে পূর্ণসংখ্যার জন্য একটি সমস্যা নয়।

এছাড়াও মান গাণিতিক ফাংশন বিবেচনা করুন: পাপ, cos এবং tan শুধুমাত্র অর্ধেক তাদের ইনপুট মানগুলির জন্য কাজ করবে, আপনি মানগুলির লগটি খুঁজে পাচ্ছেন না <1, আপনি চতুর্ভুজ সমীকরণ সমাধান করতে পারছেন না: x = (-b +/- root ( বিবি - 4.এসি)) / 2.এ, এবং তাই। প্রকৃতপক্ষে, এটি সম্ভবত কোনও জটিল ফাংশনের জন্য কাজ করবে না কারণ এটিগুলি বহুবচনীয় পরিমাপ হিসাবে প্রয়োগ করা হয় যা কোথাও নেতিবাচক মানগুলি ব্যবহার করবে।

সুতরাং, স্বাক্ষরিত ভাসা বেশ নিরর্থক হয়।

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


সি-র অনির্ধারিত পূর্ণসংখ্যা প্রকারগুলি একটি বিমূর্ত বীজগণিত রিংগুলির নিয়ম মেনে চলার জন্য এভাবে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, যে কোনও মান X এবং Y এর জন্য, YY থেকে YY যোগ করে X টি ফলিত হবে। অসাক্ষরিত পূর্ণসংখ্যা ধরনের সমস্ত ক্ষেত্রে এই নিয়মগুলি মেনে চলার নিশ্চয়তা দেওয়া হয় যা অন্য সাংখ্যিক প্রকারে বা অন্য রূপে রূপান্তরিত হয় না [বা স্বাক্ষরযুক্ত বিভিন্ন আকারের] , এবং যে গ্যারান্টি এই ধরনের সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য এক। কিছু ক্ষেত্রে, অতিরিক্ত গ্যারান্টিগুলির জন্য বিনিময়ে নেতিবাচক সংখ্যার প্রতিনিধিত্ব করার ক্ষমতা ছেড়ে দেওয়া উপযুক্ত নয় শুধুমাত্র স্বাক্ষরিত ধরনের প্রদান করতে পারে। ভাসমান-বিন্দু প্রকারগুলি সাইন ইন হোক না কেন, একটি বীজগণিত রিংয়ের সমস্ত নিয়মগুলি মেনে চলতে পারে না [যেমন তারা X + YY সমান X] সমানভাবে গ্যারান্টি দেয় না এবং প্রকৃতপক্ষে IEEE তাদের কোনও নিয়মগুলি মেনে চলতে দেয় না সমতা শ্রেণী [নির্দিষ্ট মূল্য প্রয়োজন দ্বারা নিজেদেরকে অসম তুলনা]। আমি মনে করি না যে একটি "স্বাক্ষরিত" ভাসমান-বিন্দু টাইপ কোনওxixi দ্বারা মেনে চলতে পারে যা একটি সাধারণ ভাসমান-বিন্দু টাইপ করতে পারে না, তাই আমি নিশ্চিত নই কোন সুবিধাগুলি এটি সরবরাহ করবে।





unsigned