स्विफ्ट में गणितीय कार्य


95

मैं जैसे गणितीय कार्य का उपयोग कैसे करूँ sqrt(), floor(), round(), sin(), आदि?


जब कर:

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

मुझे मिला:

त्रुटि: अनसुलझे पहचानकर्ता 'मंजिल'
त्रुटि का उपयोग: अनसुलझे पहचानकर्ता 'sqrt' का उपयोग

यहां छवि विवरण दर्ज करें


यदि आपको Ambiguous reference to xयह उत्तर मिलता है: stackoverflow.com/a/34357943/1359306
पैट्रिक

जवाबों:


98

जैसा कि अन्य ने उल्लेख किया है कि आपके पास कई विकल्प हैं। यदि आप केवल गणितीय कार्य चाहते हैं। आप केवल डार्विन आयात कर सकते हैं।

import Darwin

यदि आप गणितीय कार्य और अन्य मानक कक्षाएं और कार्य चाहते हैं। आप फाउंडेशन आयात कर सकते हैं।

import Foundation

यदि आप सब कुछ चाहते हैं और उपयोगकर्ता इंटरफ़ेस के लिए कक्षाएं भी करते हैं, तो यह निर्भर करता है कि आपका खेल का मैदान ओएस एक्स या आईओएस के लिए है या नहीं।

OS X के लिए, आपको कोकोआ आयात करना होगा।

import Cocoa

IOS के लिए, आपको UIKit का आयात करना होगा।

import UIKit

आप फ़ाइल इंस्पेक्टर (.1) खोलकर आसानी से अपने खेल के मैदान का पता लगा सकते हैं।

खेल का मैदान सेटिंग्स - प्लेटफार्म


6
स्विफ्ट खेल के मैदान में, मुझे त्रुटि मिलती है:No such module 'Cocoa'
डेविड पॉक्सन

@noilly: थोड़े देर हो चुकी है, आपको प्लेग्राउंड की फ़ाइल संपत्तियों में फ़ाइल प्रकार को iOS पर सेट करना होगा (Cmd-Opt-0), या इसके बजाय UIKit को आयात करें, ऊपर की टिप्पणी के अनुसार
क्रिस कॉनर

1
ऐसा कोई मॉड्यूल 'कोको' नहीं
अलेक्जेंडर वोल्कोव

4
यूकीट, कोको, फाउंडेशन, सभी वैध विकल्प।
erdekhayser

कोकोआ आयात करना iOS अनुप्रयोगों में काम नहीं करता है। "ऐसा कोई मॉड्यूल 'कोको' की त्रुटि नहीं होती है। यदि आप सिर्फ UIKit का आयात करते हैं, तो आपको
Arrt

77

पूरी तरह से सटीक होने के लिए, डार्विन पर्याप्त है। पूरे कोको फ्रेमवर्क को आयात करने की आवश्यकता नहीं है।

import Darwin

बेशक, अगर आपको कोको या फाउंडेशन या अन्य उच्च स्तर के ढांचे से तत्वों की आवश्यकता है, तो आप उन्हें इसके बजाय आयात कर सकते हैं


और स्विफ्ट 3+ के साथ, आपको डार्विन (या ग्लिबक) की आवश्यकता नहीं है sqrt, floorऔर roundक्योंकि आप मूल रूप से क्रमशः उपयोग कर सकते हैं 0.5.squareRoot(), Int(0.5)और 0.5.round()
कूर

17

लिनक्स यानी उबंटू पर स्विफ्ट [2.2] का उपयोग करने वाले लोगों के लिए, आयात अलग है!

ऐसा करने का सही तरीका Glibc का उपयोग करना है। इसका कारण यह है कि ओएस एक्स और आईओएस पर, बुनियादी यूनिक्स की तरह एपीआई डार्विन में हैं, लेकिन लिनक्स में, ये ग्लासक में स्थित हैं। आयात करना यहाँ आपकी मदद नहीं करेगा क्योंकि यह अपने आप में अंतर नहीं बनाता है। ऐसा करने के लिए, आपको स्पष्ट रूप से इसे स्वयं आयात करना होगा:

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

अधिक जानने के लिए आप यहां फाउंडेशन फ्रेमवर्क के विकास का अनुसरण कर सकते हैं


EDIT: 26 दिसंबर, 2018

जैसा कि बताया द्वारा @ कोयूर , तेज 3.0 से शुरू कुछ गणित कार्यों अब प्रकार खुद को का हिस्सा हैं। उदाहरण के लिए, डबल में अब एक स्क्वायररूट फ़ंक्शन है। इसी तरह, 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+ के साथ, आपको डार्विन (या ग्लिबक) की आवश्यकता नहीं है sqrt, floorऔर roundक्योंकि आप मूल रूप से क्रमशः उपयोग कर सकते हैं 0.5.squareRoot(), Int(0.5)और 0.5.round()
कूर

@ C @ur, मैं थोड़ी देर के लिए तेजी से संपर्क से बाहर हो गया। शायद आप इस अंतर्दृष्टि को उत्तर के रूप में पेश कर सकते हैं। धन्यवाद
smac89

लिनक्स के लिए powमुझे शामिल करने के Glibcलिए, धन्यवाद!
A1PPun

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)")

1
मुझे निम्न त्रुटि मिलती है: अनसुलझे पहचानकर्ता 'sqrt' का उपयोग।
जियोवन्नी

मुझे लगता है कि यह मुझे sqrt नामक एक फ़ंक्शन की घोषणा करने की उम्मीद कर रहा है, लेकिन जाहिर है कि यह वह नहीं है जो मैं चाहता हूं। साभार
जीओवान्नी

आपको UIKit, या Cocoa, या Foundation आयात करना होगा।
बेन गोटलिब

क्या ऐसा कोई समारोह है जहाँ मैं इसे आरतों की एक सरणी दे सकता हूँ और फिर स्विफ्ट मुझे 2 (या 1, या 3, या जो भी हो) की शक्ति का एक फ़ंक्शन लौटाएगा जो इसे सबसे अच्छा मेल खाता है? जैसे मैं इसे देता हूं: [1,2,3]यह वापस आ जाएगा y = xया मैं इसे [1,4,9] दूंगा y = x^2या यह कुछ इस तरह से वापस आ जाएगाf(x)
Honey

यह मेरे लिए काम कर रहा है, लेकिन मेरा खेल का मैदान डिफ़ॉल्ट रूप से UIKit आयात करता है। और यह भी काम करता है, UIKit के बजाय फाउंडेशन या डार्विन आयात कर रहा है।
टिमबर्गस

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)        */
...

1
वैसे यह वास्तविक प्रश्न "मैं कैसे sqrt (), मंजिल (), गोल (), पाप (), आदि" का उपयोग करता हूं?
डेनएटर

2
यह एक सही उत्तर नहीं है। वे वैश्विक कार्य नहीं हैं। आपको import Cocoaउनका उपयोग करना होगा।
जेम्स बिलिंगम

3

चीजों को करने के स्विफ्ट तरीके के लिए, आप स्विफ्ट स्टैंडर्ड लाइब्रेरी में उपलब्ध उपकरणों का उपयोग करने का प्रयास कर सकते हैं। इन्हें किसी भी प्लेटफ़ॉर्म पर काम करना चाहिए जो स्विफ्ट को चलाने में सक्षम हो।

इसके बजाय floor(), round()और शेष राउंडिंग रूटीन आप उपयोग कर सकते हैं 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()

त्रिकोणमितीय कार्यों के लिए, मानक पुस्तकालय मदद नहीं कर सकता है, इसलिए आप Apple प्लेटफॉर्म पर डार्विन या लिनक्स पर Glibc आयात करना सबसे अच्छा है। उँगलियों के पार-वे भविष्य में एक भद्दा तरीका होगा।

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

let x = 1.571
print(sin(x))
// Prints "~1.0"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.