# Golang : Calculate half life decay example

Tags : golang half-life-decay power-of math-pow round

My wife is a chemistry lecturer and she was showing her student how to calculate half-life decay of an element. For this tutorial, let's pretend that we are learning chemistry and learn how to calculate half-life decay of an element with a half-life of 25 years in Golang.

Solving half-life problems is focused on using several equations. The order in which you use them depends on **the data given** and **what is being asked**.

For our code example below, we are given:

-An element has a half-life of 25 years.

-The initial amount is 320 grams.

and asked :

-How many grams after 100 years ?

```
package main
import (
"fmt"
"math"
"time"
)
func round(input float64) float64 {
if input < 0 {
return math.Ceil(input - 0.5)
}
return math.Floor(input + 0.5)
}
func halfLifeDecay(startValue int, startTime time.Time, endTime time.Time, halfLifeInSeconds int) float64 {
timeSpan := endTime.Sub(startTime)
x := 2.0
y := timeSpan.Seconds() / float64(halfLifeInSeconds)
value := float64(startValue) / math.Pow(x, y)
// even if everything is gone(decayed)
// the left over is still 1 mathematically and by physics law
if value < 1 {
value += 1
}
value = round(value)
return value
}
func main() {
// From http://www.chemteam.info/Radioactivity/Radioactivity-Half-Life.html
fmt.Println("An element has a half-life of 25 years.")
fmt.Println("The initial amount is 320 grams.")
fmt.Println("How many grams after 100 years ? ")
// Simulate 100 years later
start := time.Date(2000, 11, 10, 20, 34, 58, 651387237, time.UTC)
end := time.Date(2100, 11, 10, 20, 34, 58, 651387237, time.UTC)
fmt.Println("-------------------------------------------------")
// Confirm that we are using the proper start and end dates
years := end.Year() - start.Year()
fmt.Println("Total years : ", years)
// we use 365 days, no leap or astronomical year
halfLifeInSeconds := 25 * (365 * (24 * 3600))
fmt.Println("Half Life in Seconds : ", halfLifeInSeconds)
fmt.Printf("Grams left after %v years is : %v grams.\n", years, halfLifeDecay(320, start, end, halfLifeInSeconds))
}
```

Output:

An element has a half-life of 25 years.

The initial amount is 320 grams.

How many grams after 100 years ?

Total years : 100

Half Life in Seconds : 788400000

Grams left after 100 years is : 20 grams.

If we change the years to 50 instead of 100:

An element has a half-life of 25 years.

The initial amount is 320 grams.

How many grams after 50 years ?

Total years : 50

Half Life in Seconds : 788400000

Grams left after 50 years is : 80 grams.

Happy decaying!

**References:**

https://www.socketloop.com/tutorials/golang-calculate-time-different

Formula from http://www.chemteam.info/Radioactivity/Radioactivity-Half-Life.html

#### See also : Golang : Calculations using complex numbers example

Tags : golang half-life-decay power-of math-pow round

##### By Adam Ng

IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.

#### Advertisement

#### Tutorials

+7.4k Golang : Convert slice to array

+3.8k Gogland : Where to put source code files in package directory for rookie

912 Golang : Scan forex opportunities by Bollinger bands

+9.5k Golang : How to declare kilobyte, megabyte, gigabyte, terabyte and so on?

+4.6k Golang : Get terminal width and height example

+1.6k Mac/Linux/Windows : Get CPU information from command line

+5.8k Golang : Get the IPv4 and IPv6 addresses for a specific network interface

+1.9k Clean up Visual Studio For Mac installation failed disk full problem

+5.2k Golang : How to get URL port?

+1.8k Golang : Number guessing game with user input verification example

+11.7k Golang : How to run Golang application such as web server in the background or as daemon?

+1.2k Golang : Translate language with language package example