ভাসমান পয়েন্ট গোলাকার


13

কোনও আইইইই-754৪ ভাসমান পয়েন্ট নম্বর <১ (যেমন একটি এলোমেলো সংখ্যার জেনারেটর দিয়ে উত্পাদিত হয় যা একটি সংখ্যা> = 0.0 এবং <1.0 জেনারেট করে) কোনও সংখ্যার (ভাসমান বিন্দু আকারে) দ্বারা গুণমানের সমান বা বড় পেতে কখনই কোনও সংখ্যার দ্বারা গুণিত হতে পারে? বৃত্তাকার কারণে পূর্ণসংখ্যা?

অর্থাত

double r = random() ; // generates a floating point number in [0, 1)
double n = some_int ;
if (n * r >= n) {
    print 'Rounding Happened' ;
}

এটি বলার সমতুল্য হতে পারে যে কোনও এন এবং আর এর অস্তিত্ব রয়েছে যে যদি আই সবচেয়ে বড় সংখ্যা 1 এর চেয়ে কম হয় যা আইইইই -754 তে প্রতিনিধিত্ব করা যায় তবে এন * আর> = এন (যেখানে * এবং> = উপযুক্ত আইইইইই- 754 অপারেটর)

এটি এই ডকুমেন্টেশন এবং পোস্টগ্র্যাসকিএল র্যান্ডম ফাংশনের উপর ভিত্তি করে এই প্রশ্ন থেকে আসে


আপনি এন এর ব্যাপ্তি সম্পর্কে কিছু বলতে পারেন, অর্থাৎ আইইইই -754 ডাবল-স্পষ্টতাতে হুবহু প্রতিনিধিত্ব করা কি যথেষ্ট ছোট?
পেড্রো

@ পেড্রো এই বিশেষ ক্ষেত্রে, হ্যাঁ, এটি একটি ছোট পূর্ণসংখ্যা হবে - যেমন 10। আমি ধরে নিচ্ছি আপনি বলছেন যে এন যদি খুব বড় সংখ্যক উল্লেখযোগ্য সংখ্যার সাথে খুব বড় পূর্ণসংখ্যা হয় তবে এটি সঠিকভাবে উপস্থাপন করতে সক্ষম না হতে পারে?
ক্যাড রক্স

হুবহু, যদি , তবে f l ( R × f l ( N ) ) আর এন এর চেয়ে বড় হতে পারে । fl(N)>Nfl(R×fl(N))RN
পেড্রো

উত্তর:


8

রাউন্ড-টু-নিকটতম এবং সেই , তারপরে N R < N সর্বদা। (খুব বড় একটি পূর্ণসংখ্যার রূপান্তর না করার বিষয়ে সতর্ক হন))N>0NR<N

যাক , যেখানে সি [ 1 , 2 ) হ'ল তাত্পর্য এবং Q হল পূর্ণসংখ্যা ব্যয়কারী। যাক 1 - 2 - গুলি = আর ও বাঁধা আহরণc2q=Nc[1,2)q12s=R

NR=c2q(12s)c2q2qs,

সাম্যতার সাথে এবং যদি কেবল । ডানদিকে চেয়ে কম হয় এন এবং যেহেতু, 2 - কুই - গুলি ঠিক 0.5 শেষ জায়গায় ইউনিট এন , হয় = 1 এবং 2 - কুই - 2 - কুই - গুলি ঠিক representable (যেহেতু এন স্বাভাবিক এবং সবচেয়ে ছোটটি নয়) বা সি > 1 এবং নিকটতম বৃত্তাকারটি নিচে। উভয় ক্ষেত্রে, এন আর এন এর চেয়ে কম isc=1N2qs0.5Nc=12q2qsNc>1NRN


Wardর্ধ্বমুখী রাউন্ডিং একটি সমস্যা তৈরি করতে পারে, এটি কখনও সন্দেহহীন ব্যবহারকারীদের উপস্থিতিতে নির্বাচন করা উচিত নয়। এখানে কিছু সি 99 রয়েছে যা "0\n1\n"আমার মেশিনে প্রিন্ট করে।

#include <fenv.h>
#include <math.h>
#include <stdio.h>

int main(void) {
    double n = 10;
    double r = nextafter(1, 0);
    printf("%d\n", n == (n * r));
    fesetround(FE_UPWARD);
    printf("%d\n", n == (n * r));
}

আমি দুঃখিত, এই দিনগুলিতে আমি কিছুটা ধীরে ধীরে - এই বৈষম্যের অংশ পেতে আমার সমস্যা হচ্ছে
-2-কুই2-গুলি-2-কুইগুলি
ক্যাড রক্স

@ কেড আপাতদৃষ্টিতে আমি আজ বীজগণিত করতে পারি না। আমি বলতে চাইছি2-কুই-গুলি
টায়রোন

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