ভাসমানগুলির সাথে তুলনা করার সময়, আপনি পার্থক্যের দোরগোড়াকে কী বলে?


10

আমি এখনই জাভাতে ভাসমান তুলনা করছি এবং সবচেয়ে সহজ সূত্রটি হ'ল:

Math.abs(a - b) < THRESHOLD

পার্থক্যের দ্বারপ্রান্তে আপনার পরিবর্তনশীলটির নামকরণ করার সময়, আপনি এটির বদ্বীপ বা অ্যাপসিলন নামকরণ করবেন ? বিশেষত, ভাসমান-পয়েন্ট সংখ্যাটি উপস্থাপন করতে পারে এমন ক্ষুদ্রতম মানের জন্য দুটির মধ্যে কোনটি সঠিক শব্দ?

প্রোগ্রামিং ভাষার শব্দটি নির্দিষ্ট, নাকি এটি ভাষা জুড়ে সর্বজনীন?


1
বিকল্প পদ: "নির্ভুলতা", "রেজোলিউশন"। আমি এগুলি অবিকলভাবে পছন্দ করি;) কারণ তারা অত্যধিক প্রযুক্তিগত না বলে।
stakx

1
অফ-টপিক: ফ্লোটিং-পয়েন্ট গাইডটি এই ধরণের নিকট-সমতা তুলনা করার বিরুদ্ধে সুপারিশ করে।
stakx

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

1
@ গ্লেনএইচ 7: আমি কখনই বলিনি যে প্রশ্নটি ভাল নয় বা জবাবদিহি করা উচিত নয়। আসলে, আমিই এটিকে উজ্জীবিত করেছি। এবং যেহেতু আপনি দাবি করছেন যে আমি প্রস্তাবিত (স্বীকারোক্তভাবে কম সুনির্দিষ্ট) শর্তগুলি ভুল, তাই কেন এটি হয় তা শিখতে আগ্রহী হব ।
stakx

@ স্ট্যাকএক্স - আপনি বন্ধ করার পক্ষে ভোট দিয়েছিলেন বলে বোঝানোর জন্য ক্ষমাপ্রার্থী। এই মুহূর্তে আমি প্রশ্নে ঘনিষ্ঠ চারটি ভোটের বিষয়ে আরও প্রতিক্রিয়া জানছিলাম।

উত্তর:


18

গণিত ও প্রকৌশল বিভাগের এপসিলন

গণিত এবং সাধারণভাবে ইঞ্জিনিয়ারিংয়ে:

  • ডেল্টা সাধারণত একটি পার্থক্য বোঝাতে ব্যবহৃত হয়, যা কোনও স্কেল হতে পারে।
  • এপসিলন সাধারণত একটি নগণ্য পরিমাণ উল্লেখ করতে ব্যবহৃত হয়।

এবং এপসিলন আপনার ক্ষেত্রে আরও উপযুক্ত বলে মনে হচ্ছে।


কম্পিউটার বিজ্ঞানে এপসিলন

বিশেষত কম্পিউটার বিজ্ঞানে, অ্যাপসিলন শব্দটি মেশিনের এসপিলনকেও বোঝায় যা 1.0fক্ষুদ্রতম ভাসমানের মধ্যে পার্থক্যকে পরিমাপ করে যা এর চেয়ে কঠোরভাবে বড় 1.0f। উত্তরোত্তর নম্বরটি 1.00000011920928955078125fজাভাতে ভাসমানদের জন্য এবং এটি দিয়ে গণনা করা যায়:

float f = Float.intBitsToFloat(Float.floatToIntBits(1f) + 1);

মেশিন অ্যাপসিলনের সংজ্ঞা উপরে বর্ণিত অ্যাপসিলনের সাধারণ ব্যবহারের সাথে সামঞ্জস্যপূর্ণ।


ফ্লোটের তুলনা করা

তবে নোট করুন যে "নৈকট্য" এর সাথে ভাসমান তুলনা করার আগে তাদের স্কেল সম্পর্কে আপনার ধারণা থাকা দরকার। দুটি খুব বড় এবং সম্ভবত খুব ভিন্ন ভাসমান সমান হতে পারে:

9223372036854775808f == 9223372036854775808f + 1000000000f; //this is true!

এবং বিপরীতভাবে, দুটি ছোট ফ্লোটের মধ্যে অনেকগুলি সম্ভাব্য ফ্লোট মান (এবং বিশালতার কয়েকটি আদেশ) থাকতে পারে যা মেশিনের অ্যাপসিলন "কেবল" দ্বারা পৃথক " নীচের উদাহরণে, তার মাঝে 10,000,000 প্রাপ্তিসাধ্য ভাসা মান smallএবং f, কিন্তু তাদের পার্থক্য এখনও ভাল মেশিন Epsilon করুন:

float small = Float.MIN_VALUE; // small = 1.4E-45
float f = Float.intBitsToFloat(Float.floatToIntBits(small) + 100000000); // f = 2.3122343E-35
boolean b = (f - small < 0.00000011920928955078125f); //true!

গ্লেনএইচ 7 এর উত্তরের সাথে সংযুক্ত নিবন্ধটি ভাসমান তুলনা আরও তদন্ত করে এবং এই বিষয়গুলি কাটিয়ে উঠতে বেশ কয়েকটি সমাধানের প্রস্তাব দেয়।


2
-1: বৈজ্ঞানিক গণনা সফ্টওয়্যার এপসিলন মেশিন ইপিসিলন বা রিলেটিভ এপসিলন উভয়কেই বোঝায় (একই নিবন্ধটি দেখুন)। সাধারণত, এই একই, আনুমানিক সমতা গ্রহণ ব্যবহৃত কারণ rounding ত্রুটি আছে পরিমাণ নয় গুণিতক মেশিন epsilons বা আপেক্ষিক epsilons, এবং সাধারণত যে চেয়ে বড় মাত্রার কয়েক অর্ডার।
রওয়ং

1
@ রওং এপিসিলন শব্দটির একটি বিশেষত্ব , এবং আরও অনেকগুলি রয়েছে। ইঞ্জিনিয়ারিংয়ে সাধারণভাবে, অ্যাপসিলন একটি স্বল্প পরিমাণ বা ত্রুটির উল্লেখ করে এবং মেশিন এপসিলন সেই ধারণার সাথে সামঞ্জস্যপূর্ণ।
assylias

@ এ্যাসিয়ালিয়াস, এমন একটি নাম ব্যবহার করে যার একটি মানক সংজ্ঞা রয়েছে, এমন একটি প্রসঙ্গে যেখানে স্ট্যান্ডার্ড সংজ্ঞাটি বোঝায়, তবে এমন কোনও কিছুর জন্য যা মানক সংজ্ঞাটির সাথে সামঞ্জস্য করে না তা সমস্যাগুলির প্রাপ্তি t
এপ্রোগ্রামার

@ এপ্রোগ্রামার আমি একমত নই যে অ্যাপসিলনের সাধারণ সংজ্ঞাটি কম্পিউটিংয়ের ক্ষেত্রে প্রযোজ্য নয়।
Assylias

1
@ এ্যাসিয়ালিয়াস: স্পষ্টির জন্য ধন্যবাদ। আমি আমার -1 সরিয়েছি।
রওয়ং

16

গণিতে ডেল্টা একটি মান থেকে কিছু পার্থক্য উপস্থাপন করতে ব্যবহৃত হয়, ইপসিলন একটি স্বেচ্ছাসেবী ত্রুটির মান উপস্থাপনের জন্য ব্যবহৃত হয়। এই ক্ষেত্রে, অ্যাপসিলন হ'ল প্রচলিত নাম।


8

আপনার প্রশ্নের সরাসরি উত্তর দিতে, আপনি এই শব্দটি ব্যবহার করতে চান epsilon। আরও সঠিকভাবে, এটি machine epsilonসাধারণ ব্যবহারগুলি "মেশিন" ড্রপ করে এবং কেবল ব্যবহার করে epsilon

আমার স্থানীয় অনুলিপিটিতে float.hআমি দেখছি:

#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */  
#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */  
#define LDBL_EPSILON    DBL_EPSILON             /* smallest such that 1.0+LDBL_EPSILON != 1.0 */

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

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


আপনি জিজ্ঞাসা করেননি, তবে আমি এই রেফারেন্সটি পেয়েছি যা আপনার প্রশ্নটি পরিষ্কার করার জন্য আপনি যে উদাহরণ দিয়েছিলেন তার সাথে খুব প্রাসঙ্গিক।

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

এই নিবন্ধটিতে বেশ কিছু তথ্য রয়েছে, তবে এটি সেখান থেকে সর্বাধিক প্রাসঙ্গিক স্নিপপেট:

যদি সমতার জন্য ভাসমানগুলির তুলনা করা একটি খারাপ ধারণা হয় তবে তাদের পার্থক্যটি কিছু ত্রুটিসীমা বা এপসিলনের মানের মধ্যে রয়েছে কিনা তা যাচাই করা যায় কীভাবে:

bool isEqual = fabs(f1 – f2) <= epsilon;

এই গণনার সাহায্যে আমরা দুটি ফ্লোটের ধারণা যথেষ্ট পরিমাণে কাছাকাছি প্রকাশ করতে পারি যা আমরা তাদের সমান হিসাবে বিবেচনা করতে চাই। তবে অ্যাপসিলনের জন্য আমাদের কী মান ব্যবহার করা উচিত?
আমাদের উপরের পরীক্ষাগুলি প্রদত্ত আমরা আমাদের যোগফলটিতে ত্রুটিটি ব্যবহার করতে প্ররোচিত হতে পারি, যা প্রায় 1.19e-7f ছিল। প্রকৃতপক্ষে, সেই সঠিক মান সহ ভাসমান শৃঙ্খলায় একটি সংজ্ঞাও রয়েছে এবং এটিকে FLT_EPSILON বলা হয়।
স্পষ্টতই এটি। শিরোলেখ ফাইল দেবতারা কথা বলেছেন এবং FLT_EPSILON হ'ল সত্যিকারের অ্যাপসিলন!
তা ছাড়া আবর্জনা। 1.0 এবং 2.0 এর মধ্যে সংখ্যার জন্য FLT_EPSILON সংলগ্ন ফ্লোটগুলির মধ্যে পার্থক্য উপস্থাপন করে। ০.০ এর চেয়ে কম সংখ্যার জন্য FLT_EPSILON এর একটি ইপসিলন দ্রুত খুব বড় হয়ে যায় এবং খুব কম সংখ্যক সংখ্যার সাথে FLT_EPSILON আপনি যে সংখ্যার তুলনা করছেন তার চেয়ে বড় হতে পারে!

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


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

@ রুং - আমি এটি পড়ার পরে প্রশ্নটি ছিল ধ্রুবকের নাম ব্যবহারের জন্য সঠিক শব্দটি চিহ্নিত করা। তাই আমি মেশিন ইপসিলনে কয়েকজনকে সাথে ফ্লোট এইচ রেফারেন্স দিয়েছি। আইইইই 754 রেফারেন্সটি অনুসন্ধান করার সময় ডসনের নিবন্ধটি এমন কিছু যা আমি পেয়েছি এবং আমি মনে করি simplest formulaতুলনার জন্য ওপি'র সাথে প্রাসঙ্গিক । অনেকেই এই পদ্ধতির প্রথম প্রচেষ্টা হিসাবে ব্যবহার করেন এবং আমি ডসনের নিবন্ধটি অন্তর্ভুক্ত করি কারণ এটি তুলনা কতটা ততটা জটিল of সুতরাং আমি সরাসরি প্রশ্নের উত্তর দেওয়ার চেষ্টা করেছি এবং তারপরে এটি কেন সেভাবে ব্যবহার করব না তা উল্লেখ করার চেষ্টা করেছি।

5

এটি একটি ত্রুটি ফাংশন; পরম ত্রুটি সাধারণত বলা হয় ε (Epsilon) অথবা Δ x জন্য কিছু পরিমাণ X:

ε = | প্রত্যাশিত - আসল |

Δ x = | x 0 - এক্স  |

আপেক্ষিক ত্রুটিটিকে কখনও কখনও η (এটা) বলা হয় :

= | 1 - আসল / প্রত্যাশিত |

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

দেখা:


3

আমি এটিকে "সহনশীলতা" বলব।

সম্ভবত এটি গাণিতিকভাবে সঠিক শব্দ নয়, তবে আপনি যে প্রশ্নটি জিজ্ঞাসা করেছেন তা কেবল আমার কাছে বোঝায় যে "ডেল্টা" বা "এপসিলন" কোনওটিই ব্যবহারের জন্য ভাল পরিবর্তনশীল নাম হবে না।

আমার অভিজ্ঞতায়, সনাক্তকারী নামগুলি ব্যবহার করা আরও ভাল যা তাদের কোডগুলিতে যারা আসলে কোডটি পড়বে তা বোঝায়। একটি নিখুঁতভাবে সঠিক নামটি যদি এর অর্থ হয় যে পাঠকের এটির অর্থ কী তা বোঝার জন্য উইকিপিডিয়ায় এটি সন্ধান করা উচিত?


+1 টি। আমি সবসময় আশা করি লোকেরা তাদের সহকর্মীদের নামকরণের পাশাপাশি এখানে পোস্ট করার প্রশ্নগুলি সম্পর্কে জিজ্ঞাসা করবে।
MarkJ

6
-1, সম্মেলনগুলি এড়ানোর চেয়ে শেখা ভাল।
djechlin

+1 কারণ আমি এই প্রশ্নটি পোস্ট করেছি ঠিক একই কারণ।
NobleUplift
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.