যে ভাষাগুলিতে পূর্ণসংখ্যার ধাপগুলিতে আন্ডারস্কোরগুলি মঞ্জুরি দেয় না, তাদের 1 বিলিয়ন স্থির করে ধ্রুবক তৈরি করা কি ভাল অনুশীলন?


39

যে ভাষাগুলিতে পূর্ণসংখ্যার অক্ষরে আন্ডারস্কোরগুলি মঞ্জুরি দেয় না , তাদের 1 বিলিয়ন স্থির করে ধ্রুবক তৈরি করা কি ভাল ধারণা? যেমন সি ++ এ:

size_t ONE_BILLION = 1000000000;

অবশ্যই, আমাদের 100 এর মতো ছোট সংখ্যার জন্য ধ্রুবক তৈরি করা উচিত নয় 9 তবে 9 টি শূন্যের সাথে যুক্তিযুক্তভাবে শূন্য ছেড়ে যাওয়া বা এই জাতীয় কোডে একটি অতিরিক্ত যুক্ত করা যুক্তিযুক্ত:

tv_sec = timeInNanosec / 1000000000;
tv_nsec = timeInNanosec % 1000000000;

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

43
স্বল্প সংখ্যার জন্য কেন ধ্রুবক তৈরি করবেন না? 100 মানে কি? কিছু প্রসঙ্গ না থাকলে এটি একটি যাদু নম্বর।
অ্যালান

4
@ ম্যাথিউফোস্ক্রিনি সাধারণভাবে ভুলগুলি যে কোনও উপায়ে যেতে পারে। তবে এটি যখন আপনার ব্যাঙ্কের দিকে আসে তখন ভুলগুলি সর্বদা আপনার বিরুদ্ধে যাবে।
এমরি

23
লেখার বিষয়টি বিবেচনা করুন 1e9, 10^9বা 1_000_000_000আপনি যে ভাষাটি ব্যবহার করছেন তা সমর্থন করে।
হামার

উত্তর:


33

বেশিরভাগ ভাষায় কিছু প্রকারের ক্ষতিকারক স্বরলিপি প্রদর্শিত হয়। এক মিলিয়ন 1e6, (যার অর্থ 6 এর শক্তির 1 গুণ 10 বার)। এটি মূলত এখানে বেশিরভাগ প্রস্তাবের চেয়ে সমস্যার সমাধান করে ves

অনেকগুলি সি-এর মতো ভাষায়, বৈজ্ঞানিক স্বরলিপিটি একটি ভাসমান পয়েন্টের ধরণটি সংজ্ঞায়িত করছে , এটি আপনার দুর্ভাগ্যজনক যদি আপনার সত্যিকারের কোনও int প্রয়োজন হয়। তবে আপনি সহজেই টাইপ-কাস্ট করতে পারেন যা আপনার সূত্রে অন্তর্নিহিত রূপান্তরগুলি এড়াতে ধ্রুবক।

n / int(1e9) এক বিলিয়ন দ্বারা বিভক্ত হবে।

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


6
আমার মনে হয় NANOSECONDS_IN_ONE_SECOND সমাধানটি অনেক পরিস্কার এবং পরিষ্কার
থমাস বনিনি

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

1
একটি খুব বড় ডাবল কাস্টিং কি ভাসমান পয়েন্ট সংখ্যাগুলির আদর্শ বৃত্তাকার পার্থক্য সমস্যার ঝুঁকি না রাখে?
ফিলিপ

স্বাভাবিক নির্ভুলতা পূর্ণসংখ্যার ধরণের সাথে যতক্ষণ না আপনি রূপান্তর করতে ডাবল নির্ভুলতা ভাসা ব্যবহার করেন ততক্ষণ এটি সমস্যা হওয়া উচিত নয়। long longব্যাপ্তির মানগুলি ব্যবহার করার সময় আপনি সঠিক ।
1313

145

এটি প্রতিনিধিত্ব করে তার পরিবর্তে NANOSECONDS_IN_ONE_SECOND নামে একটি তৈরি করুন।

বা একটি সংক্ষিপ্ততর, আরও ভাল নাম যদি আপনি এটির কথা ভাবতে পারেন।


58
আমি বলব Nanoseconds_Per_Secondতবে এটি আমার মতে সঠিক উত্তর।
কেচ্যালাক্স

8
@ ম্যাথিউ আমি আপনার বক্তব্যটি পাই না। প্রতি মিটার মিলিমিটার বলায় কোনও সমস্যা নেই। আপনি বোঝাচ্ছেন যে এটি অপ্রয়োজনীয়, সেই ন্যানোসেকেন্ডে এক সেকেন্ডের এক বিলিয়ন ভগ্নাংশ তৈরি করা হয়েছে, তবে এটি আবার বললে কোনও ভুল নেই। এটি 1 + 1 = 2 বলার মতো, "প্রতি x x" আরও অর্থে বোঝা অব্যাহত রাখে যখন x এবং y মতবিরোধ হয়, যেমন "অর্ধ ডজন প্রতি ইউনিট" বা "মিলিসেকেন্ড প্রতি ন্যানোসেকেন্ড"
মার্ক ক্যানলাস

7
@ ম্যাথিউ ফস্কারিনি আসলে, না, এই প্রসঙ্গে নয়। যদি এটি হয় তবে একটি ধ্রুবকযুক্ত নাম NANOSECONDSঅর্থহীন কারণ আপনি এটি প্রয়োগ করতে হবে বলে আপনি বলতে পারবেন না। তেমনি, NANOSECONDS_PER_MICROSECONDঅনুরূপ বৈধ ধ্রুবক যে বোধগম্য হয়।
ইজকাটা

5
@ ম্যাথিউফোস্কারিণী, "মিটার প্রতি মিলিমিটার" হ'ল কাঁচা মান পাওয়ার জন্য রূপান্তরকরণের ইউনিটটি সরিয়ে ফেলার একটি উপায়। 1mm/1m = 1000, যা এখানে এখানে করা হচ্ছে ঠিক বিন্দু।
zzzzBov

11
এত টাইপিং কেন? NS_PER_SECযে কারও কাছে ন্যানোসেকেন্ডগুলি নিয়ে ডিল করা উচিত to
রেক্স কের

67

ধ্রুবক মানে সংখ্যা বোঝাতে হয়। সেখানে কোন অতিরিক্ত অর্থ নেই ONE_BILLIONকরার 1000000000। আসলে এটি আরও বিভ্রান্তিকর করে তোলে, কারণ বিভিন্ন প্রাকৃতিক ভাষায় এক বিলিয়ন অর্থ ভিন্ন কিছু (হয় এক হাজার মিলিয়ন বা মিলিয়ন মিলিয়ন)! আপনি যদি এটি আরও ছোট করে লিখতে চান তবে আপনার প্রোগ্রামিং ভাষাটি বৈজ্ঞানিক স্বরলিপি ব্যবহারের অনুমতি দেয় এমন একটি ভাল সুযোগ রয়েছে 1e9। অন্যথায়, আমি @ জনবি এর সাথে একমত, যে এই সংখ্যাটি আসলেই একটি সেকেন্ডে ন্যানোসেকেন্ডের সংখ্যা বোঝায়, তাই এটি নাম দিন।


9
ভাল পয়েন্টিং যে বিভিন্ন ভাষায় বিলিয়ন অর্থ বিভিন্ন পরিমাণ শূন্য।
ফ্রিজেনকোই

3
নিয়মিত ভাষাগুলি প্রাকৃতিক ভাষায় পরিবর্তনের পরামর্শ দেয়। নিয়মিত মানে অন্য কিছু ...
জে.কে.

ভাষাগুলিতে "বিলিয়ন" এর বিভিন্ন ব্যাখ্যা এত ভাল পয়েন্ট! কেন আমি আপনার উত্তর দুটি বার upvote করতে পারি না!
ডিএসএফ

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

1
" আছে ONE_BILLION কোনো অতিরিক্ত অর্থ 10000000000. নয় আমি অসম্মতি (ইঙ্গিত: আমি ইচ্ছাকৃতভাবে আপনি ভুলভাবে উদ্ধৃত এবং যোগ আরেকটি শূন্য; যদি আমি এটা উল্লেখ করেননি খেয়াল
কিথ থম্পসন

27

একটি বা দুটি ব্যবহারের জন্য, আমি সম্মেলনটি ব্যবহার করব:

tv_sec = timeInNanosec / (1000 * 1000 * 1000);
tv_nsec = timeInNanosec % (1000 * 1000 * 1000);

এটি পুরোপুরি স্ব-বর্ণনামূলক, একটি ধ্রুবককে সংকলিত হয় এবং এটি আঁকানো শক্ত hard

এছাড়াও, এটি ক্ষেত্রে যেমন খুব দরকারী:

var Time = 24 * 60 * 60;

যেখানে এটি দেখতে সহজ যে আমরা সেকেন্ডের মধ্যে এক দিনের কথা বলছি।


আমি সাধারণত এটিই করি। এরও সুবিধা রয়েছে যে আমি ভুলে যাব না যে আমি গতকাল NANOSECONDS_IN_ONE_SECOND সংজ্ঞায়িত করেছি এবং আজ NANOSECONDS_PER_SECOND সংজ্ঞায়িত করেছি। এবং সম্ভবত আগামীকাল ONE_AMERICAN_BILLION।
টমাস প্যাড্রন-ম্যাকার্থি

অবশ্যই 'সেকেন্ডসআইনেডে = 24 * 60 * 60' এখনও সহজ?
জেবিআরউইলকিনসন

@ জেবিআর উইলকিনসন নিশ্চিত, আমার প্রাথমিক স্নিপেট একটি ক্লাস ব্যবহার করছিল instance.Time = ..., তবে আমি এটিকে নষ্ট করে দিয়েছিলাম ...
স্ক্লিভিভজ ২

3
C অথবা C ++, (1000 * 1000 * 1000)ধরনের হয় int, যা শুধুমাত্র, তাই এটি ওভারফ্লো করতে 16 বিট হতে প্রয়োজন হয়। (1000L * 1000L * 1000L)সেটা এড়াতে লিখতে পারেন ।
কিথ থম্পসন

আমি এটা অনেক কিছু। এটি খুব ভাল কাজ করে।
vy32

10

মানটির দৈর্ঘ্য কোনও ধ্রুবক প্রয়োজন কিনা তা নির্ধারণ করে না।

আপনি যাদু সংখ্যাগুলি এড়ানোর জন্য ধ্রুবক ব্যবহার করেন , টাইপিং এড়ানোর জন্য না।

উদাহরণস্বরূপ এগুলি পুরোপুরি বৈধ স্থায়ী:

public static final int CLOSE_CURSORS_AT_COMMIT = 1;
public static final int CONCUR_READ_ONLY = 2;
public static final int CONCUR_UPDATABLE = 3;
public static final int FETCH_FORWARD = 4;
public static final int FETCH_REVERSE = 5; 
public static final int FETCH_UNKNOWN = 6;
public static final int HOLD_CURSORS_OVER_COMMIT = 7;
public static final int TYPE_FORWARD_ONLY = 8;
public static final int TYPE_SCROLL_INSENSITIVE = 9;
public static final int TYPE_SCROLL_SENSITIVE = 10;

ব্যবহার করুন:

public static final int NANOSECS_PER_SECOND = 1000000000;

(কোড নমুনাগুলি জাভাতে রয়েছে, আপনার পছন্দের ভাষায় অনুবাদ করুন)


3
+1 নাম্বারযুক্ত সংখ্যাগুলি প্রায় অকেজো। এই সংখ্যার অর্থ প্রদান করার জন্য এটি স্থির করার উদ্দেশ্য। তারা কী উপস্থাপন করে? তারা কোন জিনিস গণনা বা সীমাবদ্ধ বা আনুষ্ঠানিকভাবে সহগের নামকরণ করেছে? গণনার মান কী নয়।
জাস্টিনসি


2
এগুলি বৈধ ধ্রুবকের ভয়ানক উদাহরণ। এনামগুলির আগে তাদের তৈরি করা বাদে তাদের এনাম হওয়া উচিত ছিল।
ক্রিস্টোফার হামার্সট্রিম

@ ক্রিস্টোফারহ্যামারস্ট্রিম এগুলি সত্যই এনামদের আগে তৈরি করা হয়েছিল, তারা জাভা এসডিকে এসকিউএল প্যাকেজে রেজাল্টসেট শ্রেণীর অংশ।
তুলাইনস কর্ডোভা 26'13

2
@ ক্রিস্টোফারহ্যামারস্ট্রিম এগুলি খারাপ কারণ এখন আমাদের এনাম রয়েছে তবে মানসিক চাপের জন্য নয়। এই ক্লাসগুলি তৈরি হওয়ার সময় এনামের অস্তিত্ব ছিল না এবং FETCH_FORWARD এবং FETCH_REVERSE এর মত পারস্পরিক একচেটিয়া বিকল্পগুলির মধ্যে পার্থক্য করার জন্য তাদের একটি আলাদা মান দিচ্ছে। মানটি কোনও বিষয় নয়, কেবল সত্য যে তারা আলাদা।
তুলিনস কর্ডোভা

8

আমেরিকান না ইউরোপিয়ান বিলিয়ন?

(বা প্রযুক্তিগত দিক থেকে, স্বল্প স্কেল বা লং স্কেলের এক বিলিয়ন - একটি হ'ল 1000 মিলিয়ন, অন্যটি মিলিয়ন মিলিয়ন)।

এই বিভ্রান্তি দেওয়া হয়েছে, তারপরে আমি হ্যাঁ বলব - এটি একবারে সংজ্ঞায়িত করা এবং এটি সাথে রাখা অর্থহীন like একইভাবে আপনার সংজ্ঞাটির উপর যে কোনও ধরণের ধ্রুবক প্রয়োজন হয় - এটি একবার সংজ্ঞায়িত করার জন্য প্রযোজ্য।


17
"আমেরিকান না ইউরোপীয়ান বিলিয়ন?" - "কি? আমি জানি না! আহহহ !!!!"
টেসেরেক্স

যুক্তরাজ্যে, কমপক্ষে, আমরা দীর্ঘদিন থেকে 1e9 বিলিয়ন গ্রহণ করেছি।
জ্যাক এইডলি

1
@ টেসেরেক্স - ভাল, আপনি যখন রাজা হন তখন আপনাকে এই জিনিসগুলি জানতে হবে।
gbjbaanb

5

না করার কারণগুলি

প্রথমত, এখানে কোনও আন্ডারস্কোর না লেখার বা এটির অনুকরণের জন্য কোনও কৌশল ব্যবহার না করার কারণ: কোডগুলিতে সীমাবদ্ধতাগুলি খুঁজে পাওয়া শক্ত করে তোলে। মনে করুন যে কিছু প্রোগ্রাম প্রদর্শিত হয়েছে, কোথাও এর ক্রিয়াকলাপে, কিছু কোডের জন্য হার্ড-কোডড মান 1500000। আমি জানতে চাই যে প্রোগ্রামটির উত্স কোডটিতে এটি আসলে ঘটে থাকে, তাই আমি কোডটি গ্রেপ করে দেখি 1500000এবং কিছুই খুঁজে পাই না। কেন? এটি হেক্সাডেসিমালে থাকতে পারে (তবে কেন এমন গোলাকার দশমিক সংখ্যার জন্য)। আমার অজানা, ধ্রুবকটি আসলে লিখেছে 1_500_000। আমি Regex প্রয়োজন 1_?500_?000

মন্তব্যে চরিত্র গাইডিং

কেবলমাত্র এক ধরণের ভিজ্যুয়াল সহায়তা উপলব্ধ না হওয়ার কারণে, বা আমরা উপরের কারণে এটি ব্যবহার করতে চাই না, এর অর্থ এই নয় যে আমরা বিকল্প চাক্ষুষ সহায়তা তৈরি করতে পাঠ্য ফাইলের দুটি মাত্রার সুবিধা নিতে পারি না:

foo = bar / 1000000000;
//           --^--^--^  

এটির সাহায্যে আমরা সহজেই নিজেকে বোঝাতে পারি যে তিনটি শূন্যের তিনটি দল রয়েছে। তবুও, আমরা এর জন্য উত্স কোডটি গ্রেপ করতে 1000000000এবং এটি খুঁজে পেতে পারি।

সিনট্যাক্স রঙ

প্রোগ্রামেবল সিনট্যাক্স রঙিন সহ একটি পাঠ্য সম্পাদককে আরও ভাল পাঠযোগ্যতার জন্য বিকল্প রঙগুলির সাথে সংখ্যক ধ্রুবকগুলিতে গোষ্ঠীগুলির অঙ্কগুলিতে রঙ করা যেতে পারে। কোডে আমাদের কিছু করার দরকার নেই।

প্রাক প্রসেসিং: সি, সি ++, উদ্দেশ্য সি

এখন, আমরা যদি সত্যিই অঙ্কগুলির মধ্যে কিছু কমা চাই, সি এবং সি ++ তে আমরা কিছু প্রাকপ্রসেসিং ব্যবহার করতে পারি:

/* Four digit base TH-ousand constant macro */
/* Condensed using Horner's rule */
#define TH(A,B,C,D) ((((((A) * 1000) + (B)) * 1000) + (C)) * 1000 + D)

tv_sec = nanoseconds / TH(1,000,000,000)

মত সংখ্যার জন্য কাজ করে TH(1,234,567,890)

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

#define TOK4(A, B, C, D) A ## B ## C ## D

এখন

TOK4(1,000,000,000)       /* produces the single token 1000000000 */
TOK4(1,123,000,000.0E+2)  /* produces the single token 1123000000.0E+2 */
TOK4(pr,in,t,f)           /* produces the token printf */
TOK4(#,*,a,b)             /* undefined behavior, #*ab is not valid token syntax */

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


2
আমি যে প্রিপ্রোসেসরটি দেখেছি তার মধ্যে সেরা গালিগুলির জন্য +1 যদিও আমি এখনও এনএসইসি_PER_SEC বা উত্পাদনের কোনও কিছুর সাথে যেতে পারি।
ভিক্টর

প্রিপ্রসেসরটিকে গালি দেওয়ার জন্য খুব প্রায় -1 :)
একটি সিভিএন

3

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

NANOSEC_PER_SEC এর মতো আরও ব্যাখ্যামূলক নামটি ভাল বলে মনে হচ্ছে, কারণ এটি সময়ের জন্য কোথায় ব্যবহৃত হয় তা স্পষ্টতা যুক্ত করে। তবে, সময় ব্যতীত অন্য প্রসঙ্গে ব্যবহার করা কোনও অর্থবোধ করে না এবং প্রতিটি পরিস্থিতির জন্য পৃথক ১,০০,০০,০০০ তৈরি করা অবৈধ হবে।

আপনি প্রথমে যা করতে চান তা নির্বোধ, 'সেকেন্ডের উপর ভাগ'। এটি NANO_PER কে ছেড়ে যায়, যা কেবল ভাষা-স্বাধীন নয় (আমেরিকা ও ইউরোপে 10 ^ 9) পরিস্থিতি-স্বাধীন (ইউনিটগুলিতে সীমাবদ্ধ নেই), এবং এটি টাইপ করা এবং পড়া সহজ।


এই পোস্টটি পড়ার চেয়ে শক্ত (পাঠ্যের প্রাচীর)। আপনি এটিকে আরও ভাল আকারে সম্পাদনা করতে আপত্তি করবেন ?
gnat

3

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

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

আপনার ফাংশন একটি নিতে করুন Nanosecondsপ্যারামিটার হয়, এবং জন্য যে ক্লাসে রূপান্তর অপারেটার এবং / অথবা কনস্ট্রাকটর প্রদান Seconds, Minutes, বা কি-আছে-আপনি। এই যেখানে আপনার হয় const intবা #defineবা 1e9অন্যান্য উত্তর দেখা জন্যে।

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

এছাড়াও, এই জাতীয় ক্লাসে প্লেইন স্কেলারসপ্রাইভেট থেকে নির্মাণ করা এবং একটি স্ট্যাটিক "মেকসেকেন্ডস (ইন্টি)" ব্যবহার করা বা অস্বচ্ছ সংখ্যার opালু ব্যবহারকে নিরুৎসাহিত করার মতোই ব্যবহার করা ভাল।

আরও উদাহরণস্বরূপ আপনার উদাহরণে, C ++ এ বুস্ট.চ্রোনো পরীক্ষা করে দেখুন


1
+ খুব কমপক্ষে, কোনও ভিত্তি থেকে স্কেলিং বা অফসেট ফ্যাক্টর সহ একটি সাধারণ ধরণের ব্যবহার করুন, প্রায়শই ম্যালেন্ডেড টাইমজোনের মতো।
জাস্টিনসি 26'13

1

ধ্রুবক হওয়ার প্রয়োজন না হলে আমি ব্যক্তিগতভাবে ধ্রুবক তৈরি করা ভাল অনুশীলন হিসাবে বিবেচনা করব না। যদি এটি একাধিক স্থানে চলে যায় এবং এটি সংশোধন / বা পরীক্ষার জন্য ফাইলটির শীর্ষে সংজ্ঞায়িত করা তবে একেবারে কার্যকর হতে চলেছে।

টাইপ করার জন্য যদি কেবল তার বিশ্রী হয়? তাহলে না.

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


আমি রসিকতাটি পেয়েছি তবে যদি ব্যাঙ্ক প্রগ্রেমারগুলিকে প্রতিটি সংখ্যার জন্য একটি ধ্রুবক তৈরি করতে হয় তবে আপনি সফ্টওয়্যারটি স্থানান্তর করতে পারবেন বিশাল, নিয়ন্ত্রণহীন এবং ধীর গতির। আমি কেবল এটির মতো কী হতে পারে তা কল্পনা করতে পারি, কল্পনা করার সময় বলা হয় যে এটির কাছে অর্থ স্থানান্তর করতে 3 কার্যদিবস লাগবে .... ওহ আমার ,শ্বর, এটিই !!!
সাইমন ম্যাকলফলিন

আমার ব্যাঙ্কে অর্থ স্থানান্তর করতে 3 দিন সময় লাগে :(

1
@ ম্যাথিউফস্কারিণী ব্যাংকাররা এক্সেল ব্যবহার করেন তাদের প্রোগ্রামার প্রয়োজন নেই;)
ম্যাটিউজ

@ সিমন ভাষা এবং সংকলকের উপর নির্ভর করে ধ্রুবকগুলিকে কোডে অনুকূলিত করা উচিত, এতে সামান্য ওভারহেড হবে। আমি আপনার বক্তব্যটি বুঝতে পারি, তবে ম্যাজিক সংখ্যার পরিবর্তে কোনও নাম ব্যবহার করা যায় না কেন ধ্রুবক ব্যবহার করা যায় কোড পঠনযোগ্যতা।
স্টিভেন

অবাস্তব পড়ার বিষয়টি টাইপ করার চেয়ে বিশ্রী সমস্যার চেয়ে অনেক বেশি।
আলব

0

আপনি যখন নিজের প্রশ্নের শিরোনামে "1000000000" এর পরিবর্তে "1 বিলিয়ন" লিখেছেন সে সম্পর্কে আপনি যখন ভাববেন, উত্তরটি হ্যাঁ কেন তা আপনি বুঝতে পারবেন।


0

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

#define SPLIT3(x, y, z) x##y##z

int largeNumber1 = SPLIT3(123,456,789);
int largeNumber2 = 123456789;

0

আমি এটি করব:

const int Million = 1000 * 1000;
const int Billion = 1000 * Million;

অথবা

const int SciMega = 1000 * 1000; const int SciGiga = 1000 * SciMega;

প্রতি সেকেন্ডে ন্যানোসেকেন্ডের সংখ্যা সম্পর্কে: ন্যানো হ'ল গিগাটির "বিপরীত"।

Kilo  Mega  Giga   etc.
10^3  10^6  10^9
Milli Micro Nano   etc.
10^-3 10^-6 10^-9

"বিজ্ঞান" নোট করুন - বিজ্ঞানের জন্য যেমন কম্পিউটারে কিলো, মেগা, গিগা ইত্যাদির অর্থ পৃথক: 1024 (2 ^ 10), 1024 * 1024 (2 ^ 20) ইত্যাদি 2 মেগাবাইট 2,000,000 বাইট নয় ।

আপডেট আপডেটকারী মন্তব্য করেছেন যে 2: ডিজিটাল এক্সপোস্টের জন্য বিশেষ শর্তাদি বিদ্যমান: http://en.wikedia.org/wiki/Mebibyte


"2 মেগাবাইট 2,000,000 বাইট নয়" " আপনার যে কোনও স্পিনিং-প্ল্যাটার হার্ড ডিস্ক প্রস্তুতকারকের কাছে জিজ্ঞাসা করুন। (ডাউনভোটার নয়, বিটিডাব্লু।)
সিভিএন

@ মাইক্রেলজোরলিং এটি একটি প্রোগ্রামিং প্রশ্ন, ব্যবসায়ের নীতিশাস্ত্র বা বিপণনের নয়। আমি হার্ড ড্রাইভ সম্পর্কে একমত না, কিন্তু এটি একটি ভিন্ন বিষয়। এবং ডাউন ভোট সম্পর্কে উচ্ছেদ!
মিঃ টিএ

1
আসলে, 2 মেগাবাইট 2,000,000 বাইট। 2 মেবিবাইটগুলি 2,097,152 বাইট। দেখুন en.wikipedia.org/wiki/Mebibyte
vy32

@ ভাই 32 ধন্যবাদ, এর আগে এর আগে কখনও শুনিনি। প্রতিবিম্বিত করতে আমার উত্তর আপডেট করবে।
মিঃ টিএ

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