You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: ell_complete.go
    path of file: ./repos/hoverfly/vendor/gonum.org/v1/gonum/mathext
    
    the code of the file until where you have to start completion: // Copyright ©2017 The Gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package mathext

import (
	"math"
)

// CompleteK computes the complete elliptic integral of the 1st kind, 0≤m≤1. It returns math.NaN() if m is not in [0,1].
//
//  K(m) = \int_{0}^{π/2} 1/{\sqrt{1-m{\sin^2θ}}} dθ
func CompleteK(m float64) float64 {
	// Reference:
	// Toshio Fukushima, Precise and fast computation
    
func CompleteB(m float64) float64 {
	// Reference:
	// Toshio Fukushima, Precise and fast computation of complete elliptic integrals
	// by piecewise minimax rational function approximation,
	// Journal of Computational and Applied Mathematics, Volume 282, 2015, Pages 71-76.
	// https://doi.org/10.1016/j.cam.2014.12.038
	// Original Fortran code available at:
	// https://www.researchgate.net/publication/295857819_xceitxt_F90_package_of_complete_elliptic_integral_computation
	if m < 0 || 1 < m || math.IsNaN(m) {
		return math.NaN()
	}

	mc := 1 - m

	if mc > 0.555073 {
		t := 2.24755971204264969*mc - 1.24755971204264969
		t2 := t * t
		p := ((2030.25011505956379 + t2*(1727.60635612511943+t2*25.0715510300422010)) + t*(3223.16236100954529+t2*(361.164121995173076+t2*0.280355207707726826)))
		q := ((2420.64907902774675 + t2*(2327.48464880306840+t2*47.9870997057202318)) + t*(4034.28168313496638+t2*(549.234220839203960+t2)))
		return p / q
	}
	if mc > 0.302367 {
		t := 3.95716761770595079*mc - 1.19651690106289522
		t2 := t * t
		p := ((2209.26925068374373 + t2*(1981.37862223307242+t2*29.7612810087709299)) + t*(3606.58475322372526+t2*(422.693774742063054+t2*0.334623999861181980)))
		q := ((2499.57898767250755 + t2*(2467.63998386656941+t2*50.0198090806651216)) + t*(4236.30953048456334+t2*(581.879599221457589+t2)))
		return p / q
	}
	if mc > 0.161052 {
		t := 7.07638962601280827*mc - 1.13966670204861480
		t2 := t * t
		p := ((2359.14823394150129 + t2*(2254.30785457761760+t2*35.2259786264917876)) + t*(3983.28520266051676+t2*(492.601686517364701+t2*0.396605124984359783)))
		q := ((2563.95563932625156 + t2*(2633.23323959119935+t2*52.6711647124832948)) + t*(4450.19076667898892+t2*(622.983787815718489+t2)))
		return p / q
	}
	if mc > 0.083522 {
		t := 12.8982329420869341*mc - 1.07728621178898491
		t2 := t * t
		p := ((2464.65334987833736 + t2*(2541.68516994216007+t2*41.5832527504007778)) + t*(4333.38639187691528+t2*(571.53606797524881+t2*0.465975784547025267)))
		q := ((2600.66956117247726 + t2*(2823.69445052534842+t2*56.136001230010910)) + t*(4661.64381841490914+t2*(674.25435972414302+t2)))
		return p / q
	}
	if mc > 0.041966 {
		t := 24.0639137549331023*mc - 1.00986620463952257
		t2 := t * t
		p := ((2509.86724450741259 + t2*(2835.27071287535469+t2*48.9701196718008345)) + t*(4631.12336462339975+t2*(659.86172161727281+t2*0.54158304771955794)))
		q := ((2594.15983397593723 + t2*(3034.20118545214106+t2*60.652838995496991)) + t*(4848.17491604384532+t2*(737.15143838356850+t2)))
		return p / q
	}
	if mc > 0.020313 {
		t := 46.1829769546944996*mc - 0.938114810880709371
		t2 := t * t
		p := ((2480.58307884128017 + t2*(3122.00900554841322+t2*57.541132641218839)) + t*(4845.57861173250699+t2*(757.31633816400643+t2*0.62119950515996627)))
		q := ((2528.85218300581396 + t2*(3253.86151324157460+t2*66.496093157522450)) + t*(4979.31783250484768+t2*(812.40556572486862+t2)))
		return p / q
	}
	if mc > 0.009408 {
		t := 91.7010545621274645*mc - 0.862723521320495186
		t2 := t * t
		p := ((2365.25385348859592 + t2*(3381.09304915246175+t2*67.442026950538221)) + t*(4939.53925884558687+t2*(862.16657576129841+t2*0.70143698925710129)))
		q := ((2390.48737882063755 + t2*(3462.34808443022907+t2*73.934680452209164)) + t*(5015.4675579215077+t2*(898.99542983710459+t2)))
		return p / q
	}
	if mc > 0.004136 {
		t := 189.681335356600910*mc - 0.784522003034901366
		t2 := t * t
		p := ((2160.82916040868119 + t2*(3584.53058926175721+t2*78.769178005879162)) + t*(4877.14832623847052+t2*(970.53716686804832+t2*0.77797110431753920)))
		q := ((2172.70451405048305 + t2*(3630.52345460629336+t2*83.173163222639080)) + t*(4916.35263668839769+t2*(993.36676027886685+t2)))
		return p / q
	}
	if mc > 0 {
		t := 1 - 106.292517006802721*mc
		p := mc * math.Log(mc*0.0625) * (6607.46457640413908 + t*(19.0287633783211078-t*0.00625368946932704460)) / (26150.3443630974309 + t*(354.603981274536040+t))
		q := (26251.5678902584870 + t*(168.788023807915689+t*0.352150236262724288)) / (26065.7912239203873 + t*(353.916840382280456+t))
		return p + q
	}

	return 1
}