আপনার কেন ভাসা / ডাবল দরকার?


29

আমি http://www.joelonsoftware.com/items/2011/06/27.html দেখছিলাম এবং জোন স্কীট রসিকতা 0.3 না বলেই হেসেছি। আমার ব্যক্তিগতভাবে কখনও ভাসা / দশমিক / ডাবলসের সমস্যা ছিল না তবে আমি মনে করি আমি খুব তাড়াতাড়ি 6502 শিখেছি এবং আমার বেশিরভাগ প্রোগ্রামে কখনও ফ্লোটের দরকার পড়ে না। আমি কেবলমাত্র এটি গ্রাফিক্স এবং গণিতের জন্য ব্যবহার করেছি যেখানে ভুল সংখ্যাগুলি ঠিক ছিল এবং আউটপুটটি পর্দার জন্য ছিল এবং সংরক্ষণ করা হবে না (কোনও ডিবি, ফাইলে) বা নির্ভর dependent

আমার প্রশ্ন হ'ল আপনি সাধারণত কোথায় ভাসা / দশমিক / ডাবল ব্যবহার করেন? সুতরাং আমি এই গোস্তাগুলি সন্ধান করতে জানি। অর্থের সাহায্যে আমি শতবর্ষে লম্বা এবং স্টোরের মানগুলি ব্যবহার করি, কোনও গেমের মধ্যে কোনও বস্তুর গতির জন্য আমি ইনটস যুক্ত করি এবং বিভক্ত (বা বিটশিফ্ট) মূল্য জানতে আমার পিক্সেল স্থানান্তরিত করতে হবে কিনা তা জানার জন্য। (আমি 6502 দিনে অবজেক্ট মুভ করেছি, আমাদের কোনও বিভাজন ছিল না বা ভাসমান ছিল না তবে শিফট ছিল)।

তাই আমি বেশিরভাগই কৌতূহলী ছিলাম।


10
কারণ এটি খুব গুরুত্বপূর্ণ যে আমি আমার বন্ধকের উপর প্রদান করা সুদটি 12.6 থেকে যায় এবং দোস্টে 13 হয়ে যায় 13 এগুলি একটি দুর্দান্ত গোল সংখ্যা।
চনি

1
"আমি খুব তাড়াতাড়ি 50৫০২ শিখেছি এবং আমার বেশিরভাগ প্রোগ্রামে কখনও ফ্লোটের দরকার পড়ে না ... কোনও বস্তুর গতির জন্য আমি ইনট যুক্ত করি এবং পিক্সেলটি স্থানান্তরিত করতে হবে কিনা তা জানার জন্য মানটি ভাগ করে নেব।" লম্বা সেন্ট হিসাবে অর্থের উপস্থাপনা ব্যতীত আধুনিক অনুশীলনে এই কাজগুলি সম্পাদন করার জন্য এটি খুব অস্বাভাবিক উপায়।
'14

ভাল জিনিস কম্পিউটার বুঝতে মিলিলিকেন্ট।
টাইলারম্যাক

1
অথবা অতিরিক্ত হিসাবে, যখন আমরা ভগ্নাংশ ব্যবহার করতে পারি তখন দশমিক কেন ব্যবহার করবেন?
টাইলারম্যাক

6
@ সক্রুজ - হাস্যকরভাবে আপনি কোনও ফ্লোটে 0.6 প্রতিনিধিত্ব করতে পারবেন না।
মার্টিন বেকেট

উত্তর:


28

কারণ তারা, বেশিরভাগ উদ্দেশ্যে, পূর্ণসংখ্যার চেয়ে আরও নির্ভুল।

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

তবে তারপরে, আপনি কিছু ঘন ঘন হাতের মতো খুব ধীর গতির কিছু বর্ণনা করতেও পারেন। বুলেট অবজেক্টের চেয়ে ধীরে ধীরে গতি বাড়ানোর প্রায় 6 টি অর্ডার হিসাবে, প্রথম এলডি (10⁶) ≈ 20 বিট শূন্য, short intএটি প্রারম্ভ থেকে বিভিন্ন প্রকারকে নিয়ম করে । ঠিক আছে, আজ আমাদের longসর্বত্র রয়েছে, যা আমাদের এখনও 12-টি বিট সহ স্বাচ্ছন্দ্য দেয়। তবে তারপরেও, ঘড়ির গতিটি কেবলমাত্র চার দশমিক জায়গায় to এটি খুব ভাল ঘড়ি নয় ... তবে এটি অবশ্যই একটি গেমের জন্য ঠিক। কেবলমাত্র আপনি রাস্টারটিকে এর চেয়ে বেশি মোটা করে তুলতে চাইবেন না।

... যা সমস্যার দিকে নিয়ে যায় যদি কোনও দিন আপনার নতুন, এমনকি আরও দ্রুত ধরণের অবজেক্টটি প্রবর্তন করা উচিত। কোনও "হেডরুম" বাকি নেই।

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

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


পূর্ণসংখ্যা পুরোপুরি নির্ভুল। ত্রুটি সঠিক গণনা থেকে নির্ভরশীল।
fjdumont

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

53

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


28

আপনার এখানে সত্যিই দুটি প্রশ্ন আছে।

যে কারও জন্য কেন ভাসমান পয়েন্ট গণিতের প্রয়োজন?

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

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

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

কারও কেন একটি ভাসমান বনাম একটি ডাবল প্রয়োজন ?

আইইইই 754 স্ট্যান্ডার্ড উপস্থাপনা সহ, একটি 32-বিট ফ্লোট আপনাকে প্রায় 7 দশমিক অঙ্কের নির্ভুলতা এবং 10 -38 থেকে 10 38 পরিসীমাতে এক্সটোন্ট দেয় । একটি -৪-বিট ডাবল আপনাকে প্রায় 15 দশমিক অঙ্কের নির্ভুলতা দেয় এবং 10 -307 থেকে 10 307 এর পরিসীমাতে এক্সটোনারগুলি দেয় ।

মনে হতে পারে যে কারও পক্ষে যুক্তিসঙ্গতভাবে যা প্রয়োজন তার জন্য ভাসা যথেষ্ট হবে, তবে তা নয়। উদাহরণস্বরূপ, অনেক বাস্তব-বিশ্বের পরিমাণগুলি 7 টিরও বেশি দশমিক মাপে পরিমাপ করা হয়।

তবে আরও সূক্ষ্মভাবে, কথোপকথনে "রাউন্ডঅফ ত্রুটি" নামে একটি সমস্যা রয়েছে। বাইনারি ফ্লোটিং পয়েন্ট উপস্থাপনাগুলি কেবলমাত্র সেই মানগুলির জন্য বৈধ যাঁর ভগ্নাংশের অংশগুলি 2 এর শক্তিযুক্ত 2 বা 2 এর শক্তি হিসাবে ডিনোমিনেটর রাখে, ইত্যাদি 1/10 এর মতো অন্যান্য ভগ্নাংশকে উপস্থাপন করতে আপনি "বৃত্তাকার" নিকটতম বাইনারি ভগ্নাংশের মান, তবে এটি কিছুটা ভুল - এটি "রাউন্ডঅফ ত্রুটি"। তারপরে আপনি যখন এই ভুল সংখ্যার উপর গণিত করেন, ফলাফলগুলির অপ্রতুলতাগুলি আপনি যা শুরু করেছিলেন তার চেয়ে অনেক খারাপ হতে পারে - কখনও কখনও ত্রুটির শতাংশটি বহুগুণ হয়ে যায়, বা তাত্পর্যপূর্ণভাবে পাইল করে দেয়।

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

প্রকৃতপক্ষে, তাদের 15 দশমিক অঙ্ক সহ -৪-বিট ডাবলগুলি অনেক অ্যাপ্লিকেশনের পক্ষে যথেষ্ট ভাল নয়। আমি 1985 সালে 80-বিট ফ্লোটিং পয়েন্ট সংখ্যা ব্যবহার করছিলাম এবং আইইইই এখন একটি 128-বিট (16-বাইট) ভাসমান পয়েন্টের ধরণটি সংজ্ঞায়িত করে, যার জন্য আমি ব্যবহারগুলি কল্পনা করতে পারি।


2
জ্যোতির্বিদ্যার জন্য টেলিস্কোপের মতো উচ্চ-রেজোলিউশন নিয়ন্ত্রণ সিস্টেমের সাথে আমার অভিজ্ঞতা +1 বব আপনার শর্তাদি বাছাই না করে 64৪ বিট ডাবল যথেষ্ট ভাল নয়। আগুন নিয়ন্ত্রণ এবং দীর্ঘ পরিসীমা নেভিগেশনের জন্য ডিটো
টিম উইলিসক্রফ্ট

20

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

আসুন উদাহরণ দেওয়া যাক: একজন বিকাশকারী এক বছরে ,000 100,000 করে। তার সঠিক মাসের বেতন কত? পূর্ণসংখ্যা ব্যবহার করে আপনি ফলাফল পাবেন $ 8333.33 (¢ 833333), যা 12 দ্বারা গুণিত হয়েছে $ 99,999.96। এটি পূর্ণসংখ্যার সাহায্য হিসাবে রাখা কি? না, তা হয়নি।

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

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


1
@ জোব - দশমিক এবং ভাসমানগুলি একেবারেই আলাদা। আপনি দশমিক হুবহু ঠিক এক জায়গায় সংরক্ষণ করতে পারেন তবে ভাসা বা দ্বিগুণ নয়।
স্কট হুইটলক

3
আমার আরও একটি প্রশ্ন ছিল। যদি আপনি $100,000/12কোনও ফ্লোট প্রদান করেন এবং ব্যবহার করেন। ফলাফলটি ঠিক ১০০,০০০ ডলার কেন হবে? প্রতিবার কাউকে বেতন দেওয়া হলেও কেন ভাসমান (বা দশমিক) উপরে বা নীচে নামবেন না? আমি চেক লেখার সময় কথা বলছি (আপনি 1/2 বা 1/3 শতাংশ করতে পারবেন না) বা সরাসরি আমানত (আমার ধারণা এটির একই সীমাবদ্ধতা রয়েছে)

@ অ্যাসিড: >>> এক্স = 100000 / 12.0 >>> এক্স * 12
100000.0

আমার মন্তব্য আবার পড়ুন? আমার প্রশ্ন হ'ল আমি যখন প্রতি মাসে একটি চেক তৈরি করতে সফ্টওয়্যার ব্যবহার করি। যেহেতু কেউ ১/২ শতাংশ দিতে পারে না সেই ব্যক্তি কীভাবে এক বছরের পরে পুরো পরিমাণটি পাবেন?

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

4

আপনি যা বর্ণনা করেছেন তা হ'ল পরিস্থিতিগুলির জন্য পুরোপুরি ভাল কাজ যেখানে আপনি সমস্ত ইনপুট এবং ফলাফলগুলি নিয়ন্ত্রণ করেন

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

আপনি তালিকাভুক্ত কৌশলগুলি ব্যবহার করলেও বাস্তবে আপনি এই সমস্যাগুলির মুখোমুখি হবেন। কোনও মূল্যে 17.5% করের গণনা করার সময় আপনি ভগ্নাংশ সেন্ট পাবেন যা আপনি মূল্য ডলার বা সেন্ট হিসাবে সংরক্ষণ করুন। আপনি যদি পর্যাপ্ত পরিমাণে টাকা পরিশোধ না করেন তবে ট্যাক্স লোকটি খুব মন খারাপ হয়ে যায় বলে আপনাকে গোলটি ঠিক করতে হবে। সঠিক moneyপ্রকারগুলি (আপনি যে ভাষায় ব্যবহার করছেন তা সে যাই হোক না কেন) আপনাকে ব্যাথার দুনিয়া থেকে রক্ষা করবে।


টাকার ধরণ কী? (ভাষা বা রেফারেন্স লিঙ্ক) এবং কেন এটি 'সঠিক' টাইপ? এটি এর কারণ ... 128 বাইট বা আরও কিছু? আমার অন্য কেন আমার 'কৌশল' ব্যবহার ভুল হবে? আপনার শতকরা পুরো সংখ্যা রয়েছে। আপনি যদি এটি .175 দ্বারা একাধিক করেন তবে আপনি একটি সম্পূর্ণ নম্বর পাবেন এবং যা চান তার জন্য এটি ব্যবহার করবেন। আপনার উদাহরণের কথা চিন্তা করে আমার মনে হয় ভাসাটি আমার মান যথেষ্ট যথাযথতার সাথে ধরে রাখতে সক্ষম হবে তবে আমি 0.3f == 0.3d মিথ্যা বলে ভেবে চিন্তিত হব না। -অডিট- এবং +1

1
@ অ্যাসিডজম্বি ২৪ - আমি একটি নির্দিষ্ট ধরণের অর্থ বোঝাতে চাইনি তবে আপনার ভাষা যা টাইপ করে তা অর্থের মানকে উপস্থাপন করতে ব্যবহার করে। এছাড়াও যদি আপনার 10 সেন্ট থাকে এবং 0.175 দ্বারা গুণিত হয় আপনার কাছে 1.75 সেন্ট রয়েছে - আপনি এটি পূর্ণসংখ্যার গাণিতিক দিয়ে কীভাবে মোকাবেলা করবেন? এটি 1 সেন্ট বা 2 সেন্ট? এটিকে ভুল করুন এবং আপনার গ্রাহক করের মালিককে প্রচুর অর্থের মালিক হতে পারে end
ক্রিসএফ

আপনার কখনই 10 (একটি পূর্ণসংখ্যার) .175 (একটি আসল / ভাসমান সংখ্যা) দিয়ে গুণন করা উচিত নয় কারণ আপনার নির্ভুল সংখ্যাগুলির সাথে সঠিক সংখ্যাগুলি মিশ্রিত করা উচিত নয়; ফলাফলটি নিখুঁত হবে। অন্য কথায়, নির্ভুল সংখ্যার সিস্টেমে .175 এর মতো মানটি কখনই উপস্থিত থাকতে পারে না এবং তাই এটি একটি সংবেদনশীল গণনা। আরও ভাল সমাধান হ'ল 10000 কে 175 দ্বারা গুণ করা এবং ম্যানুয়ালি একটি ডেসিমাল পয়েন্ট whereোকানো যেখানে উপযুক্ত appropriate
ব্যারি ব্রাউন

8
@ ব্যারি - আমি জানি আপনি যে ধরণের সমস্যার মুখোমুখি হচ্ছেন তা বোঝানোর চেষ্টা করছিলাম। করের হার যদি 17.5% হয় এবং 0.1 সেন্টের মতো মানও বিদ্যমান থাকে এবং আপনাকে 10 সেন্টের দামের কোনও আইটেমের উপর ট্যাক্স গণনা করতে হবে।
ক্রিসএফ

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

3

"Theশ্বর পুরো সংখ্যাটি তৈরি করেছেন, বাকি সমস্ত কিছুই মানুষের কাজ" " - লিওপোল্ড ক্রোনেক্কার (1886)।

সংজ্ঞা দ্বারা, আপনি না প্রয়োজন সংখ্যার অন্য কোন ধরণের। প্রোগ্রামিং ভাষার জন্য টুরিং সম্পূর্ণতা বিভিন্ন ধরণের সংখ্যার মধ্যে সহজ সম্পর্কের উপর ভিত্তি করে। আপনি যদি পুরো সংখ্যাগুলি (এক / কে / প্রাকৃতিক সংখ্যা) দিয়ে কাজ করতে পারেন তবে আপনি যে কোনও কিছু করতে পারেন।

প্রশ্নটি এক ধরণের বিশিষ্ট কারণ আপনার এগুলির দরকার নেই। সম্ভবত আপনি এমন জায়গা চান যেখানে এটি সুবিধাজনক বা অনুকূল বা সস্তা বা কিছু বা কিছু?


7
আমরা সম্পূর্ণ সংখ্যার সাথেও সরবরাহ করতে পারি, যেহেতু কেউ কেবল সেট থিওরি অপারেশন এবং খালি সেট ব্যবহার করে সেগুলি তৈরি করতে পারে। তবে উভয়ই এবং টিউরিং সম্পূর্ণতার পক্ষে যুক্তি হ'ল একাডেমিক হ্রাসকরণকে চূড়ান্ত দিকে নিয়ে যাওয়া।
বব মারফি

4
এছাড়াও, ট্যুরিং সম্পূর্ণতা কেবল কম্পিউটিংয়ের ক্ষেত্রে প্রযোজ্য। পুরো সংখ্যা বা এমনকি যৌক্তিক কোনওটিই গাণিতিকভাবে সম্পূর্ণ নয়, যেহেতু উভয়ই কচির সিকোয়েন্সগুলিতে রূপান্তরিত হয়নি। ক্রোনেকার গরম বাতাসে পূর্ণ ছিল: আপনি যদি একটি সম্পূর্ণ মেট্রিক স্পেস চান যেখানে পুরো সংখ্যা অন্তর্ভুক্ত থাকে তবে আপনাকে বাস্তব পেতে হবে: xkcd.com/849
বব মারফি

1
@ বোবি মারফি: "একাডেমিক হ্রাসকে চরমভাবে নিয়ে যাওয়া"। অবিকল। প্রশ্নটি দরিদ্র এবং সম্ভাব্য উত্তর হিসাবে এটি নিয়ে যায়।
এসলট

2

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

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


1

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

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

ঘটনাক্রমে, ফিক্স-পয়েন্ট গণিতটি 32-বিটের চেয়ে 8-বিট এবং 16-বিট প্রসেসরের সাথে বেশি সুবিধাজনক ছিল। একটি 8-বিট প্রসেসরের ক্ষেত্রে, 32 বিট যথেষ্ট পরিমাণে যথেষ্ট না এমন পরিস্থিতিতে 40-বিট প্রকারের জন্য কেবল 32% বিট প্রকারের চেয়ে 25% বেশি স্থান এবং 25-50% বেশি সময় ব্যয় করতে হবে এবং এর জন্য 37.5% প্রয়োজন হবে space৪-বিট টাইপের চেয়ে কম স্থান এবং ৩.5.৫--০% কম সময়। একটি 32-বিট প্ল্যাটফর্মে, যদি 32-বিট টাইপ কোনও কিছুর জন্য যথেষ্ট না থাকে তবে প্রায়শই b৪ বিটের চেয়ে কম কিছু ব্যবহার করার খুব কম কারণ থাকে। যদি একটি 48-বিট ফিক্সড-পয়েন্ট টাইপ পর্যাপ্ত হয় তবে একটি 64-বিট "ডাবল" ঠিক ঠিক তেমনি ফিক্স-পয়েন্ট টাইপও কাজ করবে।


0

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

double average(List<Double> data) {
  double ans = 0;
  for(Double d : data) {
    ans += d;
  }
  return ans / data.size();
}

কারণটি হ'ল পর্যাপ্ত পরিমাণ বৃহত তালিকার জন্য আপনি যথেষ্ট পরিমাণে বড় হয়ে গেলে মূলত সমস্ত ডেটা পয়েন্ট হারাবেন ans(যেমন এটি দেখুন )। এই কোডটি নিয়ে সমস্যাটি হ'ল ছোট তালিকার জন্য এটি সম্ভবত কাজ করবে --- এটি কেবলমাত্র স্কেল হয়ে গেছে যা এটি ভেঙে যায়।

ব্যক্তিগতভাবে, আমি মনে করি আপনার কেবল তখন সেগুলি ব্যবহার করা উচিত: ক) গণনাটি সত্যই দ্রুত হওয়া উচিত; খ) আপনি ফলস্বরূপ না যে ফলাফলটি সম্ভবত বন্ধ হতে পারে (যদি না আপনি সত্যিই জানেন যে আপনি কী করছেন)।


-1

একটি ধারণা হ'ল আপনি যখন পূর্ণসংখ্যার ব্যাপ্তির বাইরে মানগুলি নিয়ে কাজ করার প্রয়োজন হয় তখন আপনি ভাসা বা দ্বৈত উপস্থাপনা ব্যবহার করবেন।

আজকের স্থাপত্যগুলিতে (মোটামুটিভাবে) +/- 2,147,483,647 (32 বিট) বা +/- 9,223,372,036,854,775,807 (bit৪ বিট) এর একটি স্বাক্ষরিত পূর্ণসংখ্যা পরিসীমা রয়েছে। স্বাক্ষরযুক্ত এটি 2 এর গুণক দ্বারা প্রসারিত করে।

আইইইই 754 ফ্লোট (মোটামুটিভাবে) +/- 1.4 × 10 ^ −45 থেকে 3.4 × 10 ^ 38 এ যায়। এখানে প্রচুর শর্তাদি এবং নির্দিষ্টকরণ বাদ দিয়ে + /- 5 × 10−324 ± 2.225 × 10 ^308 এ ডাবল প্রসারিত হয়।

অবশ্যই, সবচেয়ে আশ্চর্যজনক স্পষ্ট কারণ হ'ল আপনাকে -0 ;-) উপস্থাপন করতে হতে পারে


নম্বরগুলি মূলত উইকিপিডিয়া নিবন্ধ থেকে এবং উদাহরণস্বরূপ বোঝানো হয়। -0 ব্যতীত, এটি কেবল মজাদার জন্য।
স্টিফেন

সমস্যাটি হ'ল সেই বিশাল পরিসরে প্রচুর সংখ্যক পূর্ণসংখ্যা রয়েছে যা একেবারেই উপস্থাপিত হয় না।
ব্যারি ব্রাউন

@ ব্যারিব্রাউন একেবারে ঠিক। যদিও "প্রচুর শর্তাবলী এবং নির্দিষ্টকরণ বাদ দেওয়া হয়েছে"।
স্টিফেন

-1

সাধারণ কারণ হ'ল তারা দ্রুত কারণ জেভিএম সাধারণত অন্তর্নিহিত হার্ডওয়্যার সমর্থন ব্যবহার করে (আপনি যদি স্ট্রেডফপি ব্যবহার না করেন)।

Https://stackoverflow.com/questions/517915/when-to-use-strictfp-keyword-in-java এর জন্য স্ট্রাইকফপি কী বোঝায় তা দেখুন ।


ভাসমান পয়েন্ট গণিত পূর্ণসংখ্যার চেয়ে দ্রুত? কোন প্রসেসরের উপর ভাসমান পয়েন্ট গণনা পূর্ণসংখ্যার গণনার চেয়ে কম চক্র নেয়?
this.josh

1
@ this.josh, আপনার সংখ্যাগুলিতে আপনার সংখ্যার উপর নির্ভর করে strongly এছাড়াও পূর্ণসংখ্যাগুলি যথাযথভাবে বিভাজন করতে পারে যা গুরুত্বপূর্ণ বা নাও হতে পারে।

-2

এজন্য আমাদের 256 বিট অপারেটিং সিস্টেমের দরকার।

তক্তার দৈর্ঘ্য (আপনি যে ছোটতম দূরত্ব পরিমাপ করতে পারবেন) = 10 ^ -35 মি
পর্যবেক্ষণযোগ্য মহাবিশ্বটি = 10 ^ 25m জুড়ে 14bn পার্সেকস হয়
তাই আপনি যদি কাঠের দৈর্ঘ্যের এককগুলিতে কোনও কিছু পরিমাপ করতে পারেন যদি আপনার মাত্র 200 বিট যথার্থ থাকে।


2
-1: আপনি যদি পর্যবেক্ষণযোগ্য মহাবিশ্বের চেয়ে বৃহত্তর স্কেলগুলিতে জিনিসগুলি সিমুলেট করছেন?
আমারা

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