আশ্চর্য কি যদি সংখ্যার সাইন ( সাইনাম ফাংশন ) সন্ধানের কোনও অনর্থক উপায় থাকে ?
সুস্পষ্ট সমাধানের চেয়ে কম / দ্রুত / আরও মার্জিত সমাধান হতে পারে
var sign = number > 0 ? 1 : number < 0 ? -1 : 0;
সংক্ষিপ্ত উত্তর!
এটি ব্যবহার করুন এবং আপনি নিরাপদ এবং দ্রুত থাকবেন (উত্স: মোজ )
if (!Math.sign) Math.sign = function(x) { return ((x > 0) - (x < 0)) || +x; };
আপনার কর্মক্ষমতা এবং ধরন-উপর চাপ তুলনা তাকান করতে পারেন বেহালার
দীর্ঘ সময় কেটে গেছে। আরও প্রধানত historicalতিহাসিক কারণে।
ফলাফল
আপাতত আমাদের এই সমাধানগুলি রয়েছে:
1. স্পষ্টত এবং দ্রুত
function sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }
1.1। কেবিসি থেকে পরিবর্তন - এক ধরণের কাস্ট কম, আরও পারফরম্যান্ট, খাটো [দ্রুত]
function sign(x) { return x ? x < 0 ? -1 : 1 : 0; }
সতর্ক করা: sign("0") -> 1
2. মার্জিত, সংক্ষিপ্ত, এত দ্রুত নয় [ধীরতম]
function sign(x) { return x && x / Math.abs(x); }
সাবধান: sign(+-Infinity) -> NaN
,sign("0") -> NaN
জেএসে Infinity
একটি আইনী সংখ্যা হিসাবে এই সমাধানটি পুরোপুরি সঠিক বলে মনে হচ্ছে না।
৩. শিল্প ... তবে খুব ধীর [ধীর]
function sign(x) { return (x > 0) - (x < 0); }
৪. বিট-শিফট দ্রুত ব্যবহার করা হচ্ছে
, তবেsign(-Infinity) -> 0
function sign(x) { return (x >> 31) + (x > 0 ? 1 : 0); }
৫. টাইপ-সেফ [মেগাফাস্ট]
! ব্রাউজারগুলির মতো মনে হয় (বিশেষত ক্রোমের ভি 8) কিছু যাদু অপ্টিমাইজেশান তৈরি করে এবং এই সমাধানটি 2 টি অতিরিক্ত ক্রিয়াকলাপ থাকা সত্ত্বেও (1.1) এর চেয়ে অন্যদের তুলনায় অনেক বেশি পারফরম্যান্ট হিসাবে প্রমাণিত হয় এবং যৌক্তিকভাবে কখনই দ্রুত হতে পারে না।
function sign(x) {
return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
}
সরঞ্জামসমূহ
উন্নতি স্বাগত!
[অফটোপিক] গৃহীত উত্তর
আন্ড্রে তারানসভ - শিল্পের জন্য +100, তবে দুঃখের বিষয় এটি সুস্পষ্ট পদ্ধতির চেয়ে প্রায় 5 গুণ ধীর
ফ্রিডরিক হামিদি - একরকম সর্বাধিক উত্সাহিত উত্তর (সময়ের লেখার জন্য) এবং এটি দারুণ সুন্দর, তবে জিনিসগুলি কীভাবে করা উচিত তা অবশ্যই নয় im এছাড়াও এটি ইনফিনিটি সংখ্যাগুলি সঠিকভাবে পরিচালনা করে না, এটিও সংখ্যা you
kbec - সুস্পষ্ট সমাধানের একটি উন্নতি। বিপ্লবী নয়, সকলকে একত্রিত করে আমি এই পদ্ধতিকে সর্বোত্তম বিবেচনা করি। তাকে ভোট দিন :)
test everything
সংস্করণটি চালান , সেফ বিশেষ মানগুলি পরীক্ষা করতে অস্বীকার করবে, তাই এটি আরও দ্রুত হবে! only integers
পরিবর্তে পরীক্ষা চালানোর চেষ্টা করুন । এছাড়াও, জেএসপিফার কেবল তার কাজ করছে, এটি পছন্দ করার বিষয় নয়। :)
typeof x === "number"
পারফরমেন্সে কিছু জাদু রাখে। দয়া করে আরও রান করুন, বিশেষত এফএফ, অপেরা এবং আইই এটি পরিষ্কার করার জন্য।
Math.sign()
(0 === 0, "নিরাপদ" এর চেয়ে দ্রুত নয়) এর জন্য একটি নতুন পরীক্ষা jsperf.com/signs/7 যুক্ত করেছি ।
0