如何从Swift沙箱中绘制数据?

时间:2017-02-03 23:21:59

标签: swift xcode plot swift3 ibm-swift-sandbox

我正在练习Swift 3.x,我需要绘制一些数据。问题是我只有IBM's online Swift sandbox才能使用。绘图的目的是了解单精度代码如何受到求和的影响:

enter image description here

我写了一些代码来做到这一点,但现在我不知道如何绘制这个。我怀疑Swift可以以某种方式为绘图提供一个窗口,更不用说在通过在线沙箱运行时了。

附注:我可能能够将VNC转换到我大学的Mac计算机上以使用Xcode。如果我将相同的代码粘贴到Xcode项目中,它可以制作图吗?

以下是您希望查看的代码。我现在需要将N=1的代码运行到N=1,000,000

import Foundation

func sum1(N: Int) -> Float {

    var sum1_sum: Float = 0.0
    var n_double: Double = 0.0

    for n in 1...(2*N) {

        n_double = Double(n)
        sum1_sum += Float(pow(-1.0,n_double)*(n_double/(n_double+1.0)))
    }

    return sum1_sum
}

func sum2(N: Int) -> Float {

    var sum2_sum: Float = 0.0
    var n_double: Double = 0.0
    var sum2_firstsum: Float = 0.0
    var sum2_secondsum: Float = 0.0

    for n in 1...N {

        n_double = Double(n)
        sum2_firstsum += Float((2.0*n_double - 1)/(2.0*n_double))
        sum2_secondsum += Float((2.0*n_double)/(2.0*n_double + 1))

    }

    sum2_sum = sum2_secondsum - sum2_firstsum //This is where the subtractive cancellation occurs
    return sum2_sum
}

func sum3(N: Int) -> Float {

    var sum3_sum: Float = 0.0
    var n_double: Double = 0.0

    for n in 1...N {

        n_double = Double(n)
        sum3_sum += Float(1/(2.0*n_double*(2.0*n_double + 1)))
    }

    return sum3_sum
}

print("Sum 1:", sum1(N: 1000000))
print("Sum 2:", sum2(N: 1000000))
print("Sum 3:", sum3(N: 1000000))

1 个答案:

答案 0 :(得分:1)

是的,@ TheSoundDefense是对的。 Swift Sandbox没有直接绘图输出。但是,我建议你仍然使用Swift Sandbox。只需运行代码,然后将输出以逗号分隔的格式复制并粘贴到Excel或MATLAB中以绘制它。我做了一些调整你的sum2作为一个例子,同时也使它在这个过程中更具功能性:

   func sum2(N: Int) -> Float {

    let a: Float = (1...N).reduce(0) {
        let nDouble = Double($1)
        return Float((2.0 * nDouble - 1) / (2.0 * nDouble)) + $0
    }

    let b: Float = (1...N).reduce(0) {
        let nDouble = Double($1)
        return Float((2.0 * nDouble) / (2.0 * nDouble + 1)) + $0
    }

    return b - a
}

let N = 10
let out = (1...N).map(){ sum2(N: $0)}
let output = out.reduce(""){$0 + "\($1), "}
print(output)

0.166667,0.216667,0.240476,0.254365,0.263456,0.269867,0.274629,0.278306,0.28123,0.2383611,