সুইফট 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()
দুর্ভাগ্যক্রমে হুম কোনও খেলার মাঠে উপলভ্য নয়