Cout ব্যবহার করে আমি কীভাবে সম্পূর্ণ নির্ভুলতার সাথে ডাবল মান মুদ্রণ করব?


331

সুতরাং আমি আমার শেষ প্রশ্নের উত্তর পেয়েছি (কেন আমি এটি ভেবে দেখিনি)। আমি যখন এমন প্রত্যাশা করছিলাম না তখন এমন একটি doubleব্যবহার মুদ্রণ করছিলাম coutযা বৃত্তাকার হয়ে গেল। আমি কীভাবে পুরো নির্ভুলতা ব্যবহার করে coutমুদ্রণ তৈরি করতে পারি double?

উত্তর:


390

আপনি নির্ভুলতা সরাসরি সেট std::coutকরতে এবং std::fixedফর্ম্যাট স্পেসিফায়ার ব্যবহার করতে পারেন ।

double d = 3.14159265358979;
cout.precision(17);
cout << "Pi: " << fixed << d << endl;

আপনি #include <limits>একটি ফ্লোট বা ডাবল সর্বাধিক নির্ভুলতা পেতে পারেন ।

#include <limits>

typedef std::numeric_limits< double > dbl;

double d = 3.14159265358979;
cout.precision(dbl::max_digits10);
cout << "Pi: " << d << endl;

46
আপনি স্পষ্টভাবে ব্যবহার করার পরামর্শ দিচ্ছেন কেন fixed? সাথে double h = 6.62606957e-34;, fixedআমাকে দেয় 0.000000000000000এবং scientificআউটপুট দেয় 6.626069570000000e-34
আর্থার

36
যথার্থতাটি 17 (বা স্টাডি :: সংখ্যাসূচক: <ডাবল> :: সংখ্যা 10 + 2) হওয়া দরকার কারণ দশমিক দশমিক থেকে বাইনারি উপস্থাপনায় রূপান্তর করার সময় 2 টি অতিরিক্ত অঙ্কের প্রয়োজন হয় যখন মানটি একই মূল মানের হয়ে যায় ensure এখানে কিছু বিবরণ সহ একটি কাগজ: docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
মাইক ফিশার

8
সত্যিই কি সঠিক উত্তর? আমি যখন ম্যানুয়ালি একটি উচ্চ সংখ্যা ব্যবহার করি, তখন আমি প্রায় ৫০ অঙ্কের প্রায় মুদ্রণ করতে পারবো ই এর সাথে, তবে cout.precision(numeric_limits<double>::digits10 + 2);আমি কেবল ১ .... পেয়ে যাব ...
এসিমিলিটার

6
যারা মাইকাফিশারের উদ্ধৃতি দিয়ে কাগজে 17 অঙ্কের উল্লেখ করেছেন তাদের জন্য এটি থিওরেম 15 এর অধীনে রয়েছে।
এমিল কর্মিয়ার

15
@ মাইকফিশার আপনি ঠিক বলেছেন, সি ++ 11max_digits10 একই বর্ণনাকে পরিচয় করিয়ে দেয়। এটি প্রতিফলিত করতে উত্তর স্থির করে।
কিংবদন্তি 2 কে

70

ব্যবহার std::setprecision:

std::cout << std::setprecision (15) << 3.14159265358979 << std::endl;

2
এখানে কি কোনও ধরণের MAX_PRECISION ম্যাক্রো বা এনাম বা এমন কিছু আছে যা আমি স্টাড :: সেটপ্রিসিনে পাস করতে পারি?
জেসন পুনিউন

2
std :: একটি ডাবল (ঠিক আছে বা 16) এর জন্য সেটপ্রেসিশন (15), লগ_10 (2 ** 53) ~ = 15.9
ইউজার 7116

14
std :: setprecision (std :: numeric_limits <double> :: Digits10)
Éric

6
হওয়া উচিত std::setprecision (17)ডবল জন্য, @Bill দ্য টিকটিকির এর উত্তরে মন্তব্য দেখতে।
অ্যালেক জ্যাকবসন

9
কাজের জন্য std :: নির্ধারণের জন্য, # অন্তর্ভুক্ত <manমানি> অন্তর্ভুক্ত করা উচিত।
ব্যবহারকারী 2262504

24

আমি যা ব্যবহার করব তা এখানে:

std::cout << std::setprecision (std::numeric_limits<double>::digits10 + 1)
          << 3.14159265358979
          << std::endl;

মূলত সীমাবদ্ধ প্যাকেজের সমস্ত ধরণের বিল্ডের বৈশিষ্ট্য রয়েছে।
ভাসমান পয়েন্ট সংখ্যাগুলির (ভাসা / দ্বৈত / দীর্ঘ ডাবল) বৈশিষ্ট্যের মধ্যে একটি হ'ল অঙ্কগুলি 10 বৈশিষ্ট্য। এটি বেস 10 এ ভাসমান পয়েন্ট সংখ্যার যথার্থতা (আমি সঠিক পরিভাষাটি ভুলেছি) সংজ্ঞায়িত করে।

অন্যান্য বৈশিষ্ট্য সম্পর্কে বিশদ জানতে http://www.cplusplus.com/references/std/limits/numeric_limits.html দেখুন:


12
এই শিরোনামটি ব্যবহার করা দরকার std::setprecision(): #include <iomanip>
মার্টিন বার্গার

এটি এর std::numeric_limits<double>পরিবর্তে হওয়া উচিতnumberic_limits<double>
নিকলসফি

2
কেন তুমি যুক্ত করব 1করার std::numeric_limits<double>::digits10?
আলেসান্দ্রো জ্যাকসন

5
@ লোকীআস্টারি আপনি তার max_digits10পরিবর্তে সি + 11 ব্যবহার করতে পারেন । এই দেখুন ।
কিংবদন্তি 2 কে

1
@ আলেকজ্যাকবসন এটি বরং max_digits10কিছু স্বেচ্ছাচারী হওয়া উচিত digits10+2। অন্যথায়, ক্ষেত্রে float, long double, boost::multiprecision::float128এই, ব্যর্থ সেখানে যেহেতু আপনি প্রয়োজন চাই করবে +3পরিবর্তে +2
রুসলান

14

Iostreams উপায় এক ধরণের clunky। আমি ব্যবহার পছন্দ করি boost::lexical_castকারণ এটি আমার জন্য সঠিক নির্ভুলতার গণনা করে। এবং এটিও দ্রুত

#include <string>
#include <boost/lexical_cast.hpp>

using boost::lexical_cast;
using std::string;

double d = 3.14159265358979;
cout << "Pi: " << lexical_cast<string>(d) << endl;

আউটপুট:

পাই: 3.14159265358979


বুস্ট ডকুমেন্টেশনটি বলেছে যে "সংখ্যার জন্য যে স্ট্যান্ড :: সংখ্যার_মিলিটগুলির সাথে সম্পর্কিত বিশেষত্ব রয়েছে, বর্তমান সংস্করণটি এখন মিলের জন্য যথার্থতা বেছে নিয়েছে"। এটি সর্বাধিক নির্ভুলতা পাওয়ার সবচেয়ে সহজ উপায় বলে মনে হচ্ছে। ( boost.org/doc/libs/1_58_0/doc/html/boost_lexical_cast/… )
জেডিমাট্টো

11

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

union {
    double d;
    uint64_t u64;
} x;
x.d = 1.1;
std::cout << std::hex << x.u64;

এটি আপনাকে দ্বিগুণের 100% নির্ভুল নির্ভুলতা দেবে ... এবং একেবারে অপঠনযোগ্য হবে কারণ মানুষ আইইইই ডাবল ফর্ম্যাটটি পড়তে পারে না! বাইনারি বিটগুলি কীভাবে ব্যাখ্যা করা যায় সে সম্পর্কে উইকিপিডিয়ায় একটি ভাল লেখা রয়েছে।

আরও নতুন সি ++ এ আপনি করতে পারেন

std::cout << std::hexfloat << 1.1;

10

সম্পূর্ণ নির্ভুলতার সাথে ডাবলটি কীভাবে প্রদর্শন করবেন তা এখানে:

double d = 100.0000000000005;
int precision = std::numeric_limits<double>::max_digits10;
std::cout << std::setprecision(precision) << d << std::endl;

এটি প্রদর্শন করে:

100,0000000000005


সর্বোচ্চ_ডিজিট 10 হ'ল সংখ্যার সংখ্যা যা স্বতন্ত্রভাবে সমস্ত স্বতন্ত্র দ্বৈত মান উপস্থাপন করতে প্রয়োজনীয়। সর্বোচ্চ_ডিজিট 10 দশমিক বিন্দুর আগে এবং পরে অঙ্কগুলির সংখ্যা উপস্থাপন করে।


স্টাড :: ফিক্সড সহ সেট_প্রিসিশন (সর্বোচ্চ_ডিজিট 10) ব্যবহার করবেন না।
স্থিরীকৃত স্বরলিপিতে, সেট_প্রিসিশন () কেবল দশমিক পয়েন্টের পরে অঙ্কের সংখ্যা নির্ধারণ করে । দশমিক পয়েন্টের আগে এবং পরে সংখ্যার সংখ্যা প্রতিনিধিত্ব করে কারণ এটি সর্বোচ্চ_ডিজিট 10 ভুল ।

double d = 100.0000000000005;
int precision = std::numeric_limits<double>::max_digits10;
std::cout << std::fixed << std::setprecision(precision) << d << std::endl;

এটি ভুল ফলাফল প্রদর্শন করে:

100,00000000000049738

দ্রষ্টব্য: হেডার ফাইলগুলি প্রয়োজনীয়

#include <iomanip>
#include <limits>

4
এটি 100.0000000000005হ'ল কারণ এটি ঠিক হিসাবে প্রদর্শিত হচ্ছে না double। (এটির মতো হওয়া উচিত বলে মনে হতে পারে তবে এটি হয় না, কারণ এটি স্বাভাবিক হয়ে যায় , অর্থাত্ এর বাইনারি উপস্থাপনা)। এই দেখার জন্য, দেখুন: 100.0000000000005 - 100। আমরা পেতে 4.973799150320701e-13
এভেজেনি সার্জিভ

9

doubleCout ব্যবহার করে আমি নির্ভুলতার সাথে কোনও মান কীভাবে মুদ্রণ করব ?

ব্যবহার hexfloatবা
ব্যবহার scientificএবং নির্ভুলতা সেট করুন

std::cout.precision(std::numeric_limits<double>::max_digits10 - 1);
std::cout << std::scientific <<  1.0/7.0 << '\n';

// C++11 Typical output
1.4285714285714285e-01

অনেকগুলি উত্তরের মধ্যে 1 টির মধ্যে কেবল একটির ঠিকানা) 2) স্থির / বৈজ্ঞানিক বিন্যাস বা 3) নির্ভুলতা। নির্ভুলতার সাথে অনেকগুলি উত্তর প্রয়োজনীয় সঠিক মান সরবরাহ করে না। সুতরাং একটি পুরানো প্রশ্নের এই উত্তর।

  1. কি বেস?

doubleঅবশ্যই বেস 2 ব্যবহার করে এনকোড করা হয়েছে সি ++ 11 এর সাথে সরাসরি ব্যবহার করার জন্য প্রিন্ট করা std::hexfloat
যদি দশমিক দশমিক আউটপুট গ্রহণযোগ্য হয় তবে আমাদের কাজ শেষ are

std::cout << "hexfloat: " << std::hexfloat << exp (-100) << '\n';
std::cout << "hexfloat: " << std::hexfloat << exp (+100) << '\n';
// output
hexfloat: 0x1.a8c1f14e2af5dp-145
hexfloat: 0x1.3494a9b171bf5p+144

  1. নাহলে: fixedনাকি scientific?

doubleএকটি ভাসমান পয়েন্ট টাইপ, স্থির বিন্দু নয়

ছোট কিছু মুদ্রণ করতে ব্যর্থ হিসাবে ব্যবহার করবেন না । বড় হিসাবে , এটি অনেকগুলি সংখ্যা মুদ্রণ করে, সম্ভবত শত শত সন্দেহজনক তথ্যবহুলতা।std::fixeddouble0.000...000double

std::cout << "std::fixed: " << std::fixed << exp (-100) << '\n';
std::cout << "std::fixed: " << std::fixed << exp (+100) << '\n';
// output
std::fixed: 0.000000
std::fixed: 26881171418161356094253400435962903554686976.000000 

সম্পূর্ণ নির্ভুলতার সাথে মুদ্রণ করতে, প্রথমে ব্যবহার করুন std::scientificযা "বৈজ্ঞানিক স্বরলিপিতে ভাসমান-পয়েন্ট মান লিখবে"। দশমিক পয়েন্টের পরে 6 ডিজিটের ডিফল্ট লক্ষ্য করুন, একটি অপর্যাপ্ত পরিমাণ, পরবর্তী বিন্দুতে পরিচালিত হবে।

std::cout << "std::scientific: " << std::scientific << exp (-100) << '\n';  
std::cout << "std::scientific: " << std::scientific << exp (+100) << '\n';
// output
std::scientific: 3.720076e-44
std::scientific: 2.688117e+43

  1. কত নির্ভুলতা (মোট সংখ্যা কত)?

doubleবাইনারি বেস 2 ব্যবহার করে একটি এনকোড করা বিভিন্ন শক্তির 2 এর মধ্যে একই নির্ভুলতার এনকোড করে This এটি প্রায়শই 53 বিট হয়।

[1.0 ... 2.0) 2 53 আলাদা double,
[2.0 ... 4.0) 2 53 আলাদা double,
[4.0 ... 8.0) 2 53 আলাদা double,
[8.0 ... 10.0) আছে 2 / 8 * 2 53 টি আলাদা double

তবুও যদি কোডটি দশমিক দশকে Nউল্লেখযোগ্য অঙ্ক সহ মুদ্রণ করে তবে সংমিশ্রনের সংখ্যা [1.0 ... 10.0) 9/10 * 10 এন হয়

যাই হোক না কেন N(নির্ভুলতা) বেছে নেওয়া হোক না কেন doubleএবং দশমিক পাঠ্যের মধ্যে এক থেকে এক ম্যাপিং থাকবে না । যদি কোনও স্থির Nবাছাই করা হয়, কখনও কখনও এটি নির্দিষ্ট doubleমানগুলির জন্য সত্য প্রয়োজনের তুলনায় কিছুটা কম বা কম be আমরা খুব কম ( a)নীচে) বা অনেকগুলি ( b)নীচে) এ ত্রুটি করতে পারি ।

3 প্রার্থী N:

ক) পাঠ্য-পাঠ্য Nথেকে রূপান্তর করার সময় একটি ব্যবহার করুন doubleআমরা সকলের জন্য একই পাঠ্যে উপস্থিত হই double

std::cout << dbl::digits10 << '\n';
// Typical output
15

খ) টেক্সট Nথেকে রূপান্তর করার সময় একটি ব্যবহার doubleকরুন- doubleআমরা doubleসবার জন্য একই সাথে পৌঁছেছি double

// C++11
std::cout << dbl::max_digits10 << '\n';
// Typical output
17

যখন max_digits10উপলভ্য থাকে না তখন নোট করুন যে বেস 2 এবং বেস 10 বৈশিষ্ট্যের কারণে digits10 + 2 <= max_digits10 <= digits10 + 3আমরা digits10 + 3যথেষ্ট পরিমাণে দশমিক অঙ্ক মুদ্রিত হওয়ার জন্য বীমা করতে পারি ।

গ) Nমানের সাথে পরিবর্তিত এমন একটি ব্যবহার করুন ।

কোডটি যখন সর্বনিম্ন পাঠ্য ( N == 1) বা একটি ( এর ক্ষেত্রে ) এর সঠিক মান প্রদর্শন করতে চায় তখন এটি কার্যকর হতে পারে । তবুও যেহেতু এটি "কাজ" এবং সম্ভবত ওপি'র লক্ষ্য নয়, এটি আলাদা করা হবে।doubleN == 1000-ishdenorm_min


এটি সাধারণত খ) যা " doubleসম্পূর্ণ নির্ভুলতার সাথে মান মুদ্রণ করতে" ব্যবহৃত হয় । কিছু অ্যাপ্লিকেশন ক) খুব বেশি তথ্য না দেওয়ার ক্ষেত্রে ত্রুটি পছন্দ করতে পারে।

সঙ্গে .scientific, .precision()সেট সংখ্যা সংখ্যা দশমিক বিন্দু পরে প্রিন্ট করতে, তাই 1 + .precision()সংখ্যার ছাপা হয়। কোডের max_digits10মোট সংখ্যা দরকার তাই .precision()একটি দিয়ে ডাকা হয় max_digits10 - 1

typedef std::numeric_limits< double > dbl;
std::cout.precision(dbl::max_digits10 - 1);
std::cout << std::scientific <<  exp (-100) << '\n';
std::cout << std::scientific <<  exp (+100) << '\n';
// Typical output
3.7200759760208361e-44
2.6881171418161356e+43
//1234567890123456  17 total digits

অনুরূপ সি প্রশ্ন


দুর্দান্ত উত্তর! যদিও কয়েকটি মন্তব্য: আপনি ঠিক বলেছেন যে precision()বৈজ্ঞানিক মোডের জন্য দশমিক স্থানের সংখ্যা নির্ধারণ করে। নির্দিষ্ট না করে scientific, এটি ব্যয় বাদে মোট অঙ্কের সংখ্যা নির্ধারণ করে। আপনি এখনও আপনার সংখ্যা মানের উপর নির্ভর করে বৈজ্ঞানিক আউটপুট দিয়ে শেষ করতে পারেন, তবে তারপরে আপনি নির্দিষ্ট করে তুলনায় কম সংখ্যকও পেতে পারেন। উদাহরণ: cout.precision(3); cout << 1.7976931348623158e+308; // "1.8e+308"ফলাফলগুলি printfভিন্ন হতে পারে। বিভ্রান্তিকর জিনিসগুলির একটি সচেতন হওয়া উচিত।
সিম্পিলটন

উত্তরোত্তর জন্য, প্রিন্টফ ব্যবহার করে বৈজ্ঞানিক মোডে সমস্ত দ্বিগুণ সংখ্যার গ্যারান্টিযুক্ত সঠিক স্ট্রিং প্রতিনিধিত্বের জন্য প্রয়োজনীয় বাফার দৈর্ঘ্য এখানে রয়েছে: char buf[DBL_DECIMAL_DIG + 3 + 5]; sprintf(buf, "%.*g", DBL_DECIMAL_DIG, d);অতিরিক্ত অক্ষরগুলি হ'ল : চিহ্ন, দশমিক পয়েন্ট, শূন্য পিছনে, ই [+ | -], এক্সপোশনটির জন্য 3 অঙ্ক ( DBL_MAX_10_EXP = 308)। অতএব প্রয়োজনীয় অক্ষরের মোট সংখ্যা 25
সিম্পলটন

আমার প্রথম মন্তব্যটি সম্পাদনা করতে পারে না, সুতরাং এখানে আমরা আবার যাই: বৈজ্ঞানিক মোডের সাথে আরেকটি সমস্যা হ'ল এটি সূচকীয় আউটপুটটি ব্যবহার না করার সিদ্ধান্ত নিতে পারে, এমনকি এটি ভাসমান পয়েন্ট আউটপুটটি মোটেও ব্যবহার না করার সিদ্ধান্ত নিতে পারে। এটি, এটি "1" হিসাবে 1.0 আউটপুট দেবে, যা সিরিয়ালাইজেশন / ডিসরিয়ালাইজেশন প্রসঙ্গে সমস্যা হতে পারে। আপনি ব্যবহার করে একটি দশমিক বিন্দু আউটপুট এটা জোর করতে পারেন, কিন্তু এই অসুবিধা হল এটি trailing zeros একটি সংখ্যা, যা এটি # ছাড়া না ... যোগ হয়েছে "% # * ছ।"
আহাস্মক



0

অস্ট্রিমে :: নির্ভুলতা (ইনট)

cout.precision( numeric_limits<double>::digits10 + 1);
cout << M_PI << ", " << M_E << endl;

ফলন হবে

3.141592653589793, 2.718281828459045

আপনাকে কেন "+1" বলতে হবে আমার কোনও ক্লু নেই, তবে আপনি যে অতিরিক্ত সংখ্যাটি এড়িয়ে গেছেন তা সঠিক।


3
সংখ্যাযুক্ত_লিমিট <স্বাক্ষরবিহীন চর> :: সংখ্যা 10 সমান 2 Because এটিতে 255 .. তবে 256, 257 ... 300 ইত্যাদিও থাকতে পারে এই কারণেই 10 সংখ্যা 3 নয়! আমি মনে করি এরকম কিছু কাটিয়ে উঠতে "+1" যুক্ত করা হয়েছে।
দিমিত্রি ইয়ুরচেঙ্কো

0

এটি বিন্দুর পরে দুটি দশমিক স্থানে মান দেখায়।

#include <iostream>
#include <iomanip>

double d = 2.0;
int n = 2;
cout << fixed << setprecison(n) << d;

এখানে দেখুন: নির্দিষ্ট পয়েন্ট স্বরলিপি

এসটিডি :: সংশোধন

স্থির ফ্লোটিং-পয়েন্ট নোটেশনটি ব্যবহার করুন স্ট্র স্ট্রিমের স্থির করতে ফ্লোটফিল্ড ফর্ম্যাট পতাকা সেট করে।

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

এসটিডি :: setprecision

দশমিক নির্ভুলতা সেট করুন আউটপুট ক্রিয়াকলাপগুলিতে ভাসমান-পয়েন্ট মানগুলিকে ফর্ম্যাট করতে ব্যবহৃত দশমিক নির্ভুলতা সেট করে।

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

প্রথমে মানটি সুযোগের মধ্যে রয়েছে কিনা তা আপনাকে প্রথমে পরীক্ষা করতে হবে , যদি হ্যাঁ, তবে ব্যবহার করুন:

cout << defaultfloat << d ;

এসটিডি :: defaultfloat

ডিফল্ট ফ্লোটিং-পয়েন্ট স্বরলিপি ব্যবহার করুন স্ট্রিং স্ট্রফের জন্য ফ্ল্যাটফিল্ড ফর্ম্যাট পতাকাটি ডিফল্টফ্লোতে সেট করে।

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

এটি হ'ল ডিফল্ট আচরণ cout, যার অর্থ আপনি এটি স্পষ্টভাবে ব্যবহার করবেন না।

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