2017-09-12 66 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) 
} 
相关问题