2017-09-12 91 views
-2

我有一個冗長乏味的作業,計算前20個元素核的具體電荷。作爲一個不想在科學計算機上用同一個公式輸入不同數字20次的人,我試圖編寫它。然而我意識到:使用swift以非常小的值進行計算以標準形式表示

  1. 斯威夫特是很難用標準的形式使用原生
  2. 小數字似乎導致問題

我花了兩個輸入,以及Z是什麼,我相信被稱爲核素數目和分別質子數和施加它們於下式:

Specific charge formula

利用這一點,似乎CAUS然而問題在於e和m的價值 p,m e和m n非常小,我似乎無法與他們合作。然而,我的科學計算器可以和我手動。我怎樣才能快速做到這一點?

數據表:http://filestore.aqa.org.uk/resources/physics/AQA-7408-SDB.PDF

編輯:在實際上

我的問題我撒謊沒有正確鑄造號碼,要我相信使他們最終在大多數情況下爲0。這個問題最終變得毫無意義,我對此表示歉意,但是我會發布我的解決方案,因爲我無法複製原始問題。

+0

沒有看到您的實際Swift代碼您如何期待任何人解決您的問題? –

+0

我的swift代碼由兩個常量輸入和問題中顯示的相同公式組成,但是輸入了相同的公式,我會認爲該公式的乳膠版本具有更多含義 – Skidushe

+0

爲什麼乳膠配方可以幫助任何人瞭解什麼是錯誤的與您的Swift代碼沒有看到代碼?對於要求調試的問題,有助於在此討論關於SO的主題,該問題需要包含導致問題的代碼以及對預期和實際行爲的描述。你的問題目前是題外話題,因爲它只包含(種類)所需的行爲。請按照[如何創建最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)進行更新。 –

回答

0

您需要將每個值轉換爲雙精度來保留精度。 在計算SC的值後,我將其格式化爲更多,就像您在計算器上看到的那樣。

//Homework: calculate specific charge of a nucleus given it's nuclide notation 
import Foundation 


let A = 4 
let Z = 2 
let e = 0 

let SC = Double(1.60*pow(10,-19)*Double(Z-e))/Double((Double(Z)*(1.673*pow(10,-27)))+(Double(A-Z)*(1.675*pow(10,-27)))+(Double(e)*(1.99*pow(10,-31)))) 

let numberFormatter = NumberFormatter() 
numberFormatter.numberStyle = NumberFormatter.Style.scientific 
numberFormatter.positiveFormat = "0.###E0" 
numberFormatter.exponentSymbol = "x10^" 
if let stringFromNumber = numberFormatter.string(from: SC as NSNumber) { 
    print(stringFromNumber) 
} 
相關問題