সুইফটে গাণিতিক ফাংশন


96

আমি গাণিতিক ফাংশন ব্যবহার করব sqrt(), floor(), round(), sin(), ইত্যাদি?


যখন করছেন:

_ = floor(2.0)
_ = sqrt(2.0)

আমি পাই:

ত্রুটি: অমীমাংসিত শনাক্তকারীর ব্যবহার 'তল'
ত্রুটি: অমীমাংসিত শনাক্তকারী 'স্কয়ার্ট' এর ব্যবহার

এখানে চিত্র বর্ণনা লিখুন


যদি আপনি Ambiguous reference to xএই উত্তরটি পরীক্ষা করে দেখুন: stackoverflow.com/a/34357943/1359306
প্যাট্রিক

উত্তর:


99

অন্যান্য হিসাবে উল্লিখিত আপনার কাছে বেশ কয়েকটি বিকল্প রয়েছে। আপনি যদি চান শুধুমাত্র গাণিতিক ফাংশন। আপনি কেবল ডারউইন আমদানি করতে পারেন।

import Darwin

আপনি যদি গাণিতিক ফাংশন এবং অন্যান্য মানক ক্লাস এবং ফাংশন চান। আপনি ফাউন্ডেশন আমদানি করতে পারেন।

import Foundation

আপনি যদি ইউজার ইন্টারফেসের জন্য সবকিছু এবং ক্লাসগুলি চান তবে এটি আপনার খেলার মাঠ ওএস এক্স বা আইওএসের জন্য কিনা তা নির্ভর করে।

ওএস এক্স এর জন্য আপনার প্রয়োজন কোকো আমদানি।

import Cocoa

আইওএসের জন্য আপনার ইউআইকিট আমদানি করা দরকার।

import UIKit

ফাইল ইন্সপেক্টর (⌥⌘1) খোলার মাধ্যমে আপনি সহজেই আপনার খেলার মাঠের প্ল্যাটফর্মটি আবিষ্কার করতে পারেন।

খেলার মাঠের সেটিংস - প্ল্যাটফর্ম


6
সুইফ্ট খেলার মাঠে, আমি ত্রুটিটি No such module 'Cocoa'
পেয়েছি

@ ননিলি: এখন থেকে দেরীতে, আপনাকে প্লেগ্রাউন্ডের ফাইল বৈশিষ্ট্যগুলিতে আইওএস-তে ফাইল টাইপ সেট করতে হবে (সিএমডি-অপ্ট -0), অথবা উপরের মন্তব্য অনুসারে ইউআইকিট আমদানি করতে হবে
ক্রিস কনভার

4
এর মতো কোনও মডিউল 'কোকো' নেই
আলেকজান্ডার ভোলকভ

4
ইউআইকিট, কোকো, ফাউন্ডেশন, সমস্ত বৈধ পছন্দ।
এরদেখায়সার

কোকো আমদানি করা আইওএস অ্যাপ্লিকেশনগুলিতে কাজ করে না। "কোন ধরনের মডিউল 'কোকো' ত্রুটি arrises আপনি শুধু UIKit আমদানি থাকে, তাহলে আপনি SQRT (ব্যবহারের কোনো ত্রুটির সম্মুখীন
SomeGuy

77

পুরোপুরি সুনির্দিষ্টভাবে বলতে গেলে ডারউইন যথেষ্ট is পুরো কোকো ফ্রেমওয়ার্কটি আমদানি করার দরকার নেই।

import Darwin

অবশ্যই, আপনার যদি কোকো বা ফাউন্ডেশন বা অন্যান্য উচ্চ স্তরের ফ্রেমওয়ার্কের উপাদানগুলির প্রয়োজন হয় তবে আপনি সেগুলি পরিবর্তে আমদানি করতে পারেন


এবং দ্রুতগতি 3+ সঙ্গে, আপনার জন্য ডারউইন (অথবা glibc) প্রয়োজন না sqrt, floorএবং roundকারণ আপনার নেটিভ যথাক্রমে ব্যবহার করতে পারেন 0.5.squareRoot(), Int(0.5)এবং 0.5.round()
সিউর

17

লিনাক্সে যেমন উবুন্টুতে সুইফ্ট [২.২] ব্যবহার করা লোকের জন্য, আমদানি আলাদা!

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

#if os(macOS) || os(iOS)
import Darwin
#elseif os(Linux) || CYGWIN
import Glibc
#endif

আপনি আরও জানতে এখানে ফাউন্ডেশন কাঠামোর বিকাশ অনুসরণ করতে পারেন


সম্পাদনা: 26 ডিসেম্বর, 2018

হিসাবে নির্দিষ্ট দ্বারা @ Coeur , দ্রুতগতি 3.0 থেকে শুরু কিছু ম্যাথ ফাংশন এখন ধরনের নিজেদের অংশ। উদাহরণস্বরূপ, ডাবল এখন একটি আছে squareRoot ফাংশন। একইভাবে, ceil, floor, round, সমস্ত সঙ্গে অর্জন করা যেতে পারে Double.rounded(FloatingPointRoundingRule) -> Double

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

➜ swift          
Welcome to Swift version 4.2.1 (swift-4.2.1-RELEASE). Type :help for assistance.
  1> sqrt(9)
error: repl.swift:1:1: error: use of unresolved identifier 'sqrt'
sqrt(9)
^~~~


  1> import Foundation
  2> sqrt(9)
$R0: Double = 3
  3> floor(9.3)
$R1: Double = 9
  4> ceil(9.3) 
$R2: Double = 10

এবং দ্রুতগতি 3+ সঙ্গে, আপনার জন্য ডারউইন (অথবা glibc) প্রয়োজন না sqrt, floorএবং roundকারণ আপনার নেটিভ যথাক্রমে ব্যবহার করতে পারেন 0.5.squareRoot(), Int(0.5)এবং 0.5.round()
সিউর

@ কেউর, আমি কিছুক্ষণের জন্য দ্রুত যোগাযোগের বাইরে চলে এসেছি। সম্ভবত আপনি একটি উত্তর আকারে এই অন্তর্দৃষ্টি প্রস্তাব করতে পারেন। ধন্যবাদ
smac89

জন্য powআমি অন্তর্ভুক্ত করা প্রয়োজন Glibc, লিনাক্সের জন্য ধন্যবাদ!
আরপুন

10

আপনি এগুলি সরাসরি ইনলাইন ব্যবহার করতে পারেন:

var square = 9.4
var floored = floor(square)
var root = sqrt(floored)

println("Starting with \(square), we rounded down to \(floored), then took the square root to end up with \(root)")

4
আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: অমীমাংসিত শনাক্তকারী 'স্কয়ার্ট' এর ব্যবহার।
জিওভানি

আমি মনে করি এটি আমার স্কয়ার্ট নামে একটি ফাংশন ঘোষণা করার প্রত্যাশা করে, তবে স্পষ্টতই এটি আমি চাই না। ধন্যবাদ
জিওভান্নি

আপনাকে ইউআইকিট, বা কোকো বা ফাউন্ডেশন আমদানি করতে হবে।
বেন গটলিয়েব

এমন কোনও ফাংশন আছে যেখানে আমি এটিকে ইনস এর অ্যারে দিতে পারি এবং তারপরে সুইফট আমাকে 2 (বা 1, বা 3, বা যে কোনও) এর শক্তির সাথে সবচেয়ে ভাল মেলে এমন একটি ফাংশন ফিরিয়ে দেবে? যেমন আমি এটি দিয়েছি: [1,2,3]এটি ফিরে আসবে y = xবা আমি এটি দিয়ে দেব [1,4,9] এটি ফিরে আসবে y = x^2বা ঠিক এমনভাবে কিছু ঘটেছিলf(x)
হানি

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

8

গণিত-ফাংশন ব্যবহার করতে আপনাকে করতে হবে import Cocoa

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

ফাইলের একটি ছোট স্নিপেট

...
func pow(_: CDouble, _: CDouble) -> CDouble

func sqrtf(_: CFloat) -> CFloat
func sqrt(_: CDouble) -> CDouble

func erff(_: CFloat) -> CFloat
...
var M_LN10: CDouble { get } /* loge(10)       */
var M_PI: CDouble { get } /* pi             */
var M_PI_2: CDouble { get } /* pi/2           */
var M_SQRT2: CDouble { get } /* sqrt(2)        */
...

4
আসলে এটি আসল প্রশ্নের একটি উত্তেজক "আমি কীভাবে স্কয়ার্ট (), তল (), বৃত্তাকার (), পাপ () ইত্যাদির মতো গাণিতিক ফাংশনগুলি ব্যবহার করব?"
ড্যানিশস্টার

4
এটি সঠিক উত্তর নয়। এগুলি গ্লোবাল ফাংশন নয়। আপনি import Cocoaতাদের ব্যবহার করতে হবে।
জেমস বিলিংহাম

3

কাজ করার সুইফ্ট পদ্ধতির জন্য, আপনি চেষ্টা করতে পারেন এবং সুইফট স্ট্যান্ডার্ড লাইব্রেরিতে উপলব্ধ সরঞ্জামগুলি ব্যবহার করতে পারেন। এগুলি যে কোনও প্ল্যাটফর্মে কাজ করা উচিত যা সুইফট চালাতে সক্ষম হয়।

বদলে floor(), round()এবং rounding রুটিন আপনি ব্যবহার করতে পারেন বাকি rounded(_:):

let x = 6.5

// Equivalent to the C 'round' function:
print(x.rounded(.toNearestOrAwayFromZero))
// Prints "7.0"

// Equivalent to the C 'trunc' function:
print(x.rounded(.towardZero))
// Prints "6.0"

// Equivalent to the C 'ceil' function:
print(x.rounded(.up))
// Prints "7.0"

// Equivalent to the C 'floor' function:
print(x.rounded(.down))
// Prints "6.0"

এই বর্তমানে উপলব্ধ Floatএবং Doubleএবং এটি একটি রূপান্তর সহজ যথেষ্ট হওয়া উচিত CGFloatউদাহরণস্বরূপ।

বদলে sqrt()আছে squareRoot()FloatingPoint প্রোটোকল উপর পদ্ধতি। আবার, উভয় Floatএবং Doubleসাথে সামঞ্জস্য FloatingPointপ্রোটোকল:

let x = 4.0
let y = x.squareRoot()

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

#if os(OSX) || os(iOS)
import Darwin
#elseif os(Linux)
import Glibc
#endif

let x = 1.571
print(sin(x))
// Prints "~1.0"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.