আমার ক্ষেত্রে কোনও রাউন্ডিং ত্রুটি না ঘটলেও ভাসমান সংখ্যার সমতার তুলনা কি জুনিয়র বিকাশকারীকে বিভ্রান্ত করে?


31

উদাহরণস্বরূপ, আমি 0,0.5, ... 5 থেকে বোতামগুলির একটি তালিকা দেখাতে চাই, যা প্রতিটি 0.5 এর জন্য লাফ দেয়। এটি করার জন্য আমি লুপের জন্য একটি ব্যবহার করি এবং STANDARD_LINE বোতামে ভিন্ন বর্ণ রয়েছে:

var MAX=5.0;
var DIFF=0.5
var STANDARD_LINE=1.5;

for(var i=0;i<=MAX;i=i+DIFF){
    button.text=i+'';
    if(i==STANDARD_LINE){
      button.color='red';
    }
}

এই ক্ষেত্রে কোনও গোলিং ত্রুটি হওয়া উচিত নয় কারণ প্রতিটি মান আইইইই 754 তে সঠিক is

var MAX=10;
var STANDARD_LINE=3;

for(var i=0;i<=MAX;i++){
    button.text=i/2.0+'';
    if(i==STANDARD_LINE/2.0){
      button.color='red';
    }
}

একদিকে, মূল কোডটি আরও সহজ এবং আমার কাছে ফরোয়ার্ড। তবে একটি জিনিস আমি বিবেচনা করছি: আমি == স্ট্যান্ডার্ড_লাইন জুনিয়র সতীর্থকে বিভ্রান্ত করে? এটি কি ভাসমান পয়েন্ট সংখ্যার বৃত্তাকার ত্রুটি থাকতে পারে তা লুকিয়ে রাখে? এই পোস্ট থেকে মন্তব্য পড়ার পরে:

https://stackoverflow.com/questions/33646148/is-hardcode-float-precise-if-it-can-be-represented-by-binary-format-in-ieee-754

দেখে মনে হচ্ছে অনেকগুলি বিকাশকারী জানেন না যে কিছু ভাসমান সংখ্যা হুবহু। আমার ক্ষেত্রে এটি বৈধ হলেও আমি কি ভাসমান সংখ্যার সমতা তুলনা এড়ানো উচিত? নাকি আমি এ নিয়ে ভাবছি?


23
এই দুটি কোড তালিকার আচরণ সমতুল্য নয়। 3 / 2.0 1.5 হয় তবে iদ্বিতীয় তালিকায় কেবলমাত্র পুরো সংখ্যা হবে be দ্বিতীয়টি সরিয়ে দেওয়ার চেষ্টা করুন /2.0
candied_orange

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

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

9
কোড লিখুন। যতক্ষণ না কেউ ভেবে থাকেন যে 0.6 একটি ভাল ধাপের আকার হবে এবং কেবল এই ধ্রুবকটি পরিবর্তন করে।
tofro

11
"... জুনিয়র বিকাশকারীদের বিভ্রান্ত করুন" আপনি প্রবীণ বিকাশকারীদেরও বিভ্রান্ত করবেন। আপনি এতে যে পরিমাণ চিন্তাভাবনা রেখেছেন তা সত্ত্বেও, তারা ধরে নেবে যে আপনি কী করছেন তা আপনি জানতেন না এবং সম্ভবত এটি এটিকে পূর্ণ সংখ্যায় রূপান্তরিত করবে।
গ্র্যান্ডওপেনার

উত্তর:


116

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

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


48
আমি "ঘটতে অপেক্ষা করে একটি ত্রুটি" পছন্দ করি। অবশ্যই, এটি এখন কার্যকর হতে পারে তবে হাঁটতে হাঁটতে কারও কাছ থেকে হালকা বাতাস এটিকে ভেঙে দেবে।
আকাশম

10
উদাহরণস্বরূপ, ধরুন প্রয়োজনীয়তাগুলি এমনভাবে পরিবর্তিত হয় যাতে চতুর্থ বোতামের "স্ট্যান্ডার্ড লাইন" এর সাথে 0 থেকে 5 পর্যন্ত 11 টি সমান ব্যবধানের বোতামের পরিবর্তে আপনার 6 ষ্ঠ "স্ট্যান্ডার্ড লাইনের" সাথে 0 থেকে 5 পর্যন্ত সমান-ব্যবধানযুক্ত 16 টি বোতাম রয়েছে বোতাম। সুতরাং যে কেউ আপনার কাছ থেকে এই কোডটি উত্তরাধিকার সূত্রে পেয়েছে সে 0.5 থেকে 1.0 / 3.0 পরিবর্তন করে 1.5 থেকে 5.0 / 3.0 এ পরিবর্তন করে। তাহলে কি হয়?
ডেভিড কে

8
হ্যাঁ, আমি এই ধারণাটি থেকে অস্বস্তি করছি যে একটি স্বেচ্ছাসেবী সংখ্যা বলে মনে হচ্ছে (একটি সংখ্যা হিসাবে "স্বাভাবিক" হতে পারে) অন্য একটি স্বেচ্ছাসেবী সংখ্যায় (যেটি সমানভাবে "স্বাভাবিক" বলে মনে হচ্ছে ) আসলে একটি ত্রুটির পরিচয় দেয়।
আলেকজান্ডার - মনিকাকে পুনরায় ইনস্টল করুন

7
@ আলেকজান্ডার: ঠিক আছে, আপনার একটি মন্তব্য দরকার যা বলেছিল DIFF must be an exactly-representable double that evenly divides STANDARD_LINE। আপনি যদি সেই মন্তব্যটি লিখতে না চান (এবং আইইইই 7575 বাইনারি 64 এটি বোঝার জন্য ভাসমান পয়েন্ট সম্পর্কে যথেষ্ট জানতে ভবিষ্যতের সমস্ত বিকাশকারীদের উপর নির্ভর করুন), তবে কোডটি এভাবে লেখবেন না। অর্থাত্ কোডটি এভাবে লিখবেন না। বিশেষত কারণ এটি সম্ভবত আরও দক্ষ নয়: এফপি সংযোজনটির পূর্ণসংখ্যার সংযোজনের তুলনায় উচ্চতর লম্বাতা রয়েছে এবং এটি লুপ বহনকারী নির্ভরতা। এছাড়াও, সংকলক (এমনকি জেআইটি সংকলকও?) সম্ভবত পূর্ণসংখ্যার কাউন্টারগুলির সাথে লুপগুলি তৈরি করতে আরও ভাল করে।
পিটার কর্ডেস

39

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

এটি কিছুটা বিষয়ভিত্তিক, তবে আমার বিনীত মতে আপনি যদি একটি নির্দিষ্ট সংখ্যক বার লুপ করতে একটি পূর্ণসংখ্যার সূচকটি ব্যবহার করতে একটি লুপ পুনরায় লিখতে পারেন তবে আপনার এটি করা উচিত। সুতরাং নিম্নলিখিত বিকল্প বিবেচনা করুন:

var DIFF=0.5;                           // pixel increment
var MAX=Math.floor(5.0/DIFF);           // 5.0 is max pixel width
var STANDARD_LINE=Math.floor(1.5/DIFF); // 1.5 is pixel width

for(var i=0;i<=MAX;i++){
    button.text=(i*DIFF)+'';
    if(i==STANDARD_LINE){
      button.color='red';
    }
}

লুপ পুরো সংখ্যার ক্ষেত্রে কাজ করে। এই ক্ষেত্রে iএকটি পূর্ণসংখ্যা এবং STANDARD_LINEপাশাপাশি একটি পূর্ণসংখ্যার সাথে জোর করা হয়। রাউন্ডঅফ এবং একইভাবে যদি ঘটে থাকে তবে অবশ্যই এটি আপনার স্ট্যান্ডার্ড লাইনের অবস্থান পরিবর্তন করবে MAX, সুতরাং আপনার এখনও সঠিক রেন্ডারিংয়ের জন্য রাউন্ডঅফ প্রতিরোধ করার প্রচেষ্টা করা উচিত। তবে আপনি এখনও ভাসমান পয়েন্টের তুলনা সম্পর্কে চিন্তা না করে পিক্সেল এবং পুরো সংখ্যা না দিয়ে পরামিতি পরিবর্তন করার সুবিধা অর্জন করতে পারেন।


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

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

4
আমি দৃ strongly়ভাবে একমত না। লুপ থামানোর সর্বোত্তম উপায়টি সেই শর্তটি যা সবচেয়ে স্বাভাবিকভাবে ব্যবসায়িক যুক্তি প্রকাশ করে। ব্যবসায়ের যুক্তি যদি আপনার 11 টি বোতামের প্রয়োজন হয় তবে লুপটি পুনরাবৃত্তিতে 11 বন্ধ হওয়া উচিত। যদি ব্যবসার যুক্তিটি লাইনটি পূর্ণ না হওয়া পর্যন্ত বোতামগুলি 0.5 টি পৃথক হয়, লাইনটি পূর্ণ হওয়া অবস্থায় বন্ধ হওয়া উচিত। এমন অন্যান্য বিবেচনা রয়েছে যা একটি প্রক্রিয়া বা অন্যটির দিকে পছন্দকে চাপ দিতে পারে তবে সেই বিবেচনায় অনুপস্থিত, ব্যবসায়ের প্রয়োজনীয়তার সাথে মিলে যায় এমন প্রক্রিয়াটি চয়ন করুন।
মনিকার পুনঃস্থাপন

তোমার ব্যাখ্যা জাভা জন্য সম্পূর্ণরূপে সঠিক হবে / সি ++ / রুবি /, পাইথন / ... কিন্তু জাভাস্ক্রিপ্ট পূর্ণসংখ্যার নেই তাই iSTANDARD_LINEশুধুমাত্র পূর্ণসংখ্যার মত চেহারা। কোনও জবরদস্তি নেই, এবং DIFF, MAXএবং STANDARD_LINEসব ঠিক Numberএস। Numberপূর্ণসংখ্যা হিসাবে ব্যবহৃত গুলি নীচে নিরাপদ হওয়া উচিত 2**53, যদিও তারা এখনও ভাসমান পয়েন্ট সংখ্যা রয়েছে।
এরিক ডুমিনিল

@ এরিকডুমিনিল হ্যাঁ, তবে এটি এর অর্ধেক। অন্য অর্ধেকটি পঠনযোগ্যতা। আমি এটি এটি করার জন্য মূল কারণ হিসাবে উল্লেখ করছি, অপ্টিমাইজেশনের জন্য নয়।
নিল

20

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

আপনার কোডটি "জানে" যে উপলব্ধ লাইন প্রস্থগুলি 0 থেকে 5.0 পর্যন্ত অবধি 0.5 এর গুণক। ইহা উচিত? দেখে মনে হচ্ছে এটি ব্যবহারকারীর ইন্টারফেসের সিদ্ধান্ত যা সহজেই পরিবর্তিত হতে পারে (উদাঃ, আপনি চাইলে প্রস্থের প্রস্থের ব্যবধানগুলি প্রস্থের চেয়ে বড় হয়ে উঠতে পারে 0.2 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0 বা কিছু)।

আপনার কোডটি "জানে" যে উপলব্ধ লাইন প্রস্থের সকলেরই "দুর্দান্ত" উপস্থাপনা রয়েছে ভাসমান-পয়েন্ট সংখ্যা এবং দশমিক হিসাবে। এটি এমন কিছুর মতো লাগে যা পরিবর্তিত হতে পারে। (আপনি হয়ত 0.1, 0.2, 0.3, ... কিছু সময় চাইবেন।)

আপনার কোডটি "জানে" যে বোতামগুলিতে পাঠ্য পাঠ্যটি জাভাস্ক্রিপ্ট সেই ফ্লোটিং-পয়েন্ট মানগুলিকে রূপান্তরিত করে। এটি এমন কিছুর মতো লাগে যা পরিবর্তিত হতে পারে। (উদাহরণস্বরূপ, সম্ভবত কোনও দিন আপনি ১/৩ এর মতো প্রস্থগুলি চাইবেন যা আপনি সম্ভবত ০.৩৩৩৩৩৩৩৩৩৩৩৩৩ বা কিছু হিসাবে প্রদর্শন করতে চান না Or অথবা সম্ভবত আপনি "১. 1.5" এর সাথে সামঞ্জস্য করার জন্য "১" এর পরিবর্তে "০.০" দেখতে চান) ।)

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

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


8

একটি কোড গন্ধ এর মতো লুপে ভাসমান ব্যবহার করছে।

লুপিং অনেকগুলি উপায়ে করা যেতে পারে তবে 99.9% ক্ষেত্রে আপনার 1 বাড়াতে আটকে থাকতে হবে বা অবশ্যই জুনিয়র বিকাশকারীদের দ্বারা নয়, অবশ্যই বিভ্রান্তি দেখা দেবে।


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

3

হ্যাঁ, আপনি এটি এড়াতে চান না।

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

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

আপনার ক্ষেত্রে ইন, হবে , Murphys আইন দ্বারা, যেখানে ব্যবস্থাপনা আপনি 0.0, 0.5, 1.0 ... কিন্তু 0.0, 0.4, 0.8 ... অথবা যাই হোক না কেন নেই চায় আসা; আপনাকে তাত্ক্ষণিকভাবে বিরক্ত করা হবে এবং সমস্যাটি না পাওয়া পর্যন্ত আপনার জুনিয়র প্রোগ্রামার (বা আপনি) দীর্ঘ এবং শক্ত ডিবাগ করবেন ug

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

এবং আমি সম্ভবত অতিরিক্ত স্পষ্টতার স্বার্থে লিখব না i/2তবে i*0.5যা চলছে তা এটি স্পষ্ট করে দেয়।

var BUTTONS=11;
var STANDARD_LINE=3;

for(var i=0; i<BUTTONS; i++) {
    button.text = (i*0.5)+'';
    if (i==STANDARD_LINE) {
      button.color='red';
    }
}

দ্রষ্টব্য: মন্তব্যে উল্লিখিত হিসাবে, জাভাস্ক্রিপ্টের আসলে পূর্ণসংখ্যার জন্য পৃথক প্রকার নেই। তবে 15 ডিজিটের পূর্ণসংখ্যাগুলি নির্ভুল / নিরাপদ হওয়ার গ্যারান্টিযুক্ত ( https://www.ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer দেখুন ), সুতরাং এই জাতীয় যুক্তির জন্য ("এটি হ'ল আরও বিভ্রান্তিকর / ত্রুটিটি পূর্ণসংখ্যা বা অ-পূর্ণসংখ্যার সাথে কাজ করার ঝুঁকিপূর্ণ ") এটি" স্পিরিটে "পৃথক প্রকারের যথাযথভাবে কাছাকাছি; প্রতিদিনের ব্যবহারে (লুপস, স্ক্রিনের স্থানাঙ্ক, অ্যারে সূচকগুলি ইত্যাদি) Numberজাভাস্ক্রিপ্ট হিসাবে উপস্থাপন করা পূর্ণসংখ্যার সংখ্যার সাথে কোনও আশ্চর্য হবে না ।


আমি বুটোনস নামটি অন্য কোনও কিছুর সাথে পরিবর্তন করবো - এখানে 11 টি বোতাম রয়েছে এবং 10 নেই Maybe
gnasher729 23

এটি সত্য, @ এরিকডুমিনিল এবং আমি উত্তরের সাথে এটি সম্পর্কে কিছুটা যুক্ত করেছি। ধন্যবাদ!
আনোই

1

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

function precisionRound(number, precision) {
  let factor = Math.pow(10, precision);
  return Math.round(number * factor) / factor;
}

var maxButtonValue = 5.0;
var buttonSpacing = 0.5;

let countEstimate = precisionRound(maxButtonValue / buttonSpacing, 5);
var buttonCount = Math.floor(countEstimate) + 1;

var highlightPosition = 3;
var highlightColor = 'red';

for (let i=0; i < buttonCount; i++) {
    let buttonValue = i / buttonSpacing;
    button.text = buttonValue.toString();
    if (i == highlightPosition) {
        button.color = highlightColor;
    }
}

এটি আরও কোড হতে পারে তবে এটি আরও পাঠযোগ্য এবং আরও শক্তিশালী।


0

লুপ কাউন্টারকে মান হিসাবে ব্যবহার না করে আপনি যে মানটি দেখিয়ে চলেছেন তা গণনা করে আপনি পুরো বিষয়টি এড়াতে পারবেন:

var MAX=5.0;
var DIFF=0.5
var STANDARD_LINE=1.5;

for(var i=0; (i*DIFF) < MAX ; i=i+1){
    var val = i * DIFF

    button.text=val+'';

    if(val==STANDARD_LINE){
      button.color='red';
    }
}

-1

ভাসমান পয়েন্ট গণিত ধীরে ধীরে এবং পূর্ণসংখ্যার গাণিতিক দ্রুত হয়, তাই আমি যখন ভাসমান পয়েন্ট ব্যবহার করি তখন আমি এটি অকারণে ব্যবহার করব না যেখানে পূর্ণসংখ্যার ব্যবহার করা যেতে পারে। সর্বদা কিছু ছোট ত্রুটি সহ ভাসমান পয়েন্ট সংখ্যাগুলি, এমনকি ধ্রুবকগুলিও প্রায় আনুমানিক হিসাবে ভাবা দরকারী। নেটিভ ফ্লোটিং পয়েন্ট সংখ্যাগুলি প্লাস / মাইনাস ফ্লোটিং পয়েন্ট অবজেক্টের সাথে প্রতিস্থাপন করার জন্য এটি খুব দরকারী যখন আপনি প্রতিটি সংখ্যাকে বিন্দুর পরিবর্তে ব্যাপ্তি হিসাবে দেখেন। এইভাবে আপনি প্রতিটি গাণিতিক ক্রিয়াকলাপের পরে ক্রমবর্ধমান ক্রমবর্ধমান ভুলত্রুটি উন্মোচন করেন। সুতরাং "1.5" কে "1.45 এবং 1.55 এর মধ্যে কিছু সংখ্যা" এবং "1.50" কে "1.495 এবং 1.505 এর মধ্যে কিছু সংখ্যা" হিসাবে ভাবা উচিত।


5
ছোট মাইক্রোপ্রসেসরের জন্য সি কোড লেখার সময় পূর্ণসংখ্যার এবং ভাসমানগুলির মধ্যে পারফরম্যান্সের পার্থক্যটি গুরুত্বপূর্ণ, তবে আধুনিক x86- প্রাপ্ত সিপিইউগুলি এত দ্রুত ভাসমান পয়েন্ট করে যে কোনও গতিশীল ভাষা ব্যবহারের ওভারহেড দ্বারা কোনও জরিমানা সহজেই গ্রহিত হয়। বিশেষত, যখন প্রয়োজন হয় তখন জাভাস্ক্রিপ্ট প্রকৃতপক্ষে প্রতিটি সংখ্যাকে ভাসমান-পয়েন্ট হিসাবে উপস্থাপন করে না?
23'4 এ বাম দিকের বাইরে

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

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

1
টুইটারে আমার বক্তব্যটি কোনও প্রদত্ত পরিস্থিতিতে কোনটি অবশ্যই দ্রুততর তা সম্পর্কে নয় , কেবল "আমি জানি এফপি ধীর এবং পূর্ণসংখ্যার দ্রুত হয় তাই আমি যদি সম্ভব হয় তবে পূর্ণসংখ্যার ব্যবহার করব" আপনার মোকাবেলা করার আগেও কোনও ভাল অনুপ্রেরণা নয় আপনি যে জিনিসটি করছেন তার অপটিমাইজেশন প্রয়োজন কিনা তা নিয়ে প্রশ্ন।
জেরোইন মোস্টার্ট 11
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.