সুইফট 3 এবং 4 - প্রোটোকলে rounded(_:)ব্লুপ্রিন্টেড হিসাবে পদ্ধতিটি FloatingPointব্যবহার করা
FloatingPointপ্রোটোকল (যা যেমন করতে Doubleএবং Floatকে কনর্ফাম করে) খেয়াল rounded(_:)পদ্ধতি
func rounded(_ rule: FloatingPointRoundingRule) -> Self
FloatingPointRoundingRuleএকটি এনুম যেখানে বিভিন্ন গোলাকার নিয়মের একটি সংখ্যা গণনা করে:
case awayFromZero
নিকটতম অনুমোদিত মানটির বৃত্তাকার যার দৈর্ঘ্য উত্সের চেয়ে বড় বা সমান।
case down
উত্সের চেয়ে কম বা সমান নিকটতম অনুমোদিত মানটির বৃত্তাকার।
case toNearestOrAwayFromZero
নিকটতম অনুমোদিত মান পর্যন্ত বৃত্তাকার; যদি দুটি মান সমানভাবে নিকটে থাকে তবে বৃহত্তর মাত্রার একটি বেছে নেওয়া হয়।
case toNearestOrEven
নিকটতম অনুমোদিত মান পর্যন্ত বৃত্তাকার; যদি দুটি মান সমানভাবে নিকটে থাকে তবে একটিকেও বেছে নেওয়া হয়।
case towardZero
যার নিকটতম অনুমোদিত মানটির বৃত্তাকার দৈর্ঘ্য উত্সের চেয়ে কম বা সমান।
case up
উত্সের চেয়ে বৃহত্তর বা সমান নিকটতম অনুমোদিত মানটির বৃত্তাকার।
অনুশীলনে এই বিভিন্ন গোলাকার বিকল্পগুলি দেখানোর জন্য আমরা @ সুরগের দুর্দান্ত উত্তর থেকে আমরা একই জাতীয় উদাহরণ ব্যবহার করি ।
.awayFromZero
যার নিকটতম অনুমোদিত মানটির বৃত্তাকার দৈর্ঘ্য উত্সের চেয়ে বড় বা সমান; কোন সি ফাংশন মধ্যে সমতুল্য নির্দেশ, এই ব্যবহারের হিসাবে, শর্তসাপেক্ষে চিহ্ন উপর self, ceilবা floor, এর ইতিবাচক ও নেতিবাচক মানের জন্য selfযথাক্রমে।
3.000.rounded(.awayFromZero) // 3.0
3.001.rounded(.awayFromZero) // 4.0
3.999.rounded(.awayFromZero) // 4.0
(-3.000).rounded(.awayFromZero) // -3.0
(-3.001).rounded(.awayFromZero) // -4.0
(-3.999).rounded(.awayFromZero) // -4.0
.down
সি floorফাংশনের সমতুল্য ।
3.000.rounded(.down) // 3.0
3.001.rounded(.down) // 3.0
3.999.rounded(.down) // 3.0
(-3.000).rounded(.down) // -3.0
(-3.001).rounded(.down) // -4.0
(-3.999).rounded(.down) // -4.0
.toNearestOrAwayFromZero
সি roundফাংশনের সমতুল্য ।
3.000.rounded(.toNearestOrAwayFromZero) // 3.0
3.001.rounded(.toNearestOrAwayFromZero) // 3.0
3.499.rounded(.toNearestOrAwayFromZero) // 3.0
3.500.rounded(.toNearestOrAwayFromZero) // 4.0
3.999.rounded(.toNearestOrAwayFromZero) // 4.0
(-3.000).rounded(.toNearestOrAwayFromZero) // -3.0
(-3.001).rounded(.toNearestOrAwayFromZero) // -3.0
(-3.499).rounded(.toNearestOrAwayFromZero) // -3.0
(-3.500).rounded(.toNearestOrAwayFromZero) // -4.0
(-3.999).rounded(.toNearestOrAwayFromZero) // -4.0
এই বৃত্তাকার নিয়মটি শূন্য আর্গুমেন্ট rounded()পদ্ধতি ব্যবহার করেও অ্যাক্সেস করা যায় ।
3.000.rounded() // 3.0
// ...
(-3.000).rounded() // -3.0
// ...
.toNearestOrEven
নিকটতম অনুমোদিত মান পর্যন্ত বৃত্তাকার; যদি দুটি মান সমানভাবে নিকটে থাকে তবে একটিকেও বেছে নেওয়া হয়; সি rint(/ এর সাথে খুব মিল nearbyint) ফাংশনের সমতুল্য ।
3.499.rounded(.toNearestOrEven) // 3.0
3.500.rounded(.toNearestOrEven) // 4.0 (up to even)
3.501.rounded(.toNearestOrEven) // 4.0
4.499.rounded(.toNearestOrEven) // 4.0
4.500.rounded(.toNearestOrEven) // 4.0 (down to even)
4.501.rounded(.toNearestOrEven) // 5.0 (up to nearest)
.towardZero
সি truncফাংশনের সমতুল্য ।
3.000.rounded(.towardZero) // 3.0
3.001.rounded(.towardZero) // 3.0
3.999.rounded(.towardZero) // 3.0
(-3.000).rounded(.towardZero) // 3.0
(-3.001).rounded(.towardZero) // 3.0
(-3.999).rounded(.towardZero) // 3.0
যদি রাউন্ডিংয়ের উদ্দেশ্যটি কোনও পূর্ণসংখ্যার সাথে কাজ করার জন্য প্রস্তুত করা হয় (উদাহরণস্বরূপ রাউন্ডিংয়ের পরে আরম্ভের মাধ্যমে ব্যবহার Intকরা FloatPoint) তবে আমরা সহজেই এই সত্যটি ব্যবহার করতে পারি যে Intএকটি Double(বা Floatইত্যাদি) ব্যবহার করে সূচনা করার সময় দশমিক অংশটি কেটে ফেলা হবে।
Int(3.000) // 3
Int(3.001) // 3
Int(3.999) // 3
Int(-3.000) // -3
Int(-3.001) // -3
Int(-3.999) // -3
.up
সি ceilফাংশনের সমতুল্য ।
3.000.rounded(.up) // 3.0
3.001.rounded(.up) // 4.0
3.999.rounded(.up) // 4.0
(-3.000).rounded(.up) // 3.0
(-3.001).rounded(.up) // 3.0
(-3.999).rounded(.up) // 3.0
সংযোজন: FloatingPointবিভিন্ন FloatingPointRoundingRuleনিয়মের সি কার্যকারিতা সমতুল্যতা যাচাই করার জন্য উত্স কোডটি পরিদর্শন করা
যদি আমরা চাই, আমরা FloatingPointসর্বজনীন FloatingPointRoundingRuleবিধিগুলির সাথে সরাসরি সি ফাংশন সমতুল্য দেখতে প্রোটোকলের জন্য উত্স কোডটি একবার দেখতে পারি ।
সুইফ্ট / স্টিডলিব / পাবলিক / কোর / ফ্লোটিংপয়েন্ট.সুইফট.জিবি থেকে আমরা দেখতে পাচ্ছি যে rounded(_:)পদ্ধতির ডিফল্ট প্রয়োগটি আমাদের পরিবর্তনীয় round(_:)পদ্ধতিতে পরিণত করে:
public func rounded(_ rule: FloatingPointRoundingRule) -> Self {
var lhs = self
lhs.round(rule)
return lhs
}
সুইফ্ট / স্টিডলিব / পাবলিক / কোর / ফ্লোটিংপয়েন্টটাইপস.সুইফট.জিবি থেকে আমরা এর ডিফল্ট বাস্তবায়ন পাই round(_:), যেখানে FloatingPointRoundingRuleনিয়ম এবং সি রাউন্ডিং ফাংশনের মধ্যে সমতা সুস্পষ্ট:
public mutating func round(_ rule: FloatingPointRoundingRule) {
switch rule {
case .toNearestOrAwayFromZero:
_value = Builtin.int_round_FPIEEE${bits}(_value)
case .toNearestOrEven:
_value = Builtin.int_rint_FPIEEE${bits}(_value)
case .towardZero:
_value = Builtin.int_trunc_FPIEEE${bits}(_value)
case .awayFromZero:
if sign == .minus {
_value = Builtin.int_floor_FPIEEE${bits}(_value)
}
else {
_value = Builtin.int_ceil_FPIEEE${bits}(_value)
}
case .up:
_value = Builtin.int_ceil_FPIEEE${bits}(_value)
case .down:
_value = Builtin.int_floor_FPIEEE${bits}(_value)
}
}
pow()দুর্ভাগ্যক্রমে হুম কোনও খেলার মাঠে উপলভ্য নয়