/*
 * Copyright (c) 2024 The GoPlus Authors (goplus.org). All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package math

import (
	_ "unsafe"

	"github.com/goplus/llgo/c"
)

const (
	LLGoPackage = "decl"
)

// -----------------------------------------------------------------------------

//go:linkname Acos C.acos
func Acos(x float64) float64

//go:linkname Acosh C.acosh
func Acosh(x float64) float64

//go:linkname Asin C.asin
func Asin(x float64) float64

//go:linkname Asinh C.asinh
func Asinh(x float64) float64

//go:linkname Atan C.atan
func Atan(x float64) float64

//go:linkname Atan2 C.atan2
func Atan2(y, x float64) float64

//go:linkname Atanh C.atanh
func Atanh(x float64) float64

//go:linkname Cbrt C.cbrt
func Cbrt(x float64) float64

//go:linkname Ceil C.ceil
func Ceil(x float64) float64

//go:linkname Cos C.cos
func Cos(x float64) float64

//go:linkname Cosh C.cosh
func Cosh(x float64) float64

//go:linkname Copysign C.copysign
func Copysign(x, y float64) float64

//go:linkname Erf C.erf
func Erf(x float64) float64

//go:linkname Erfc C.erfc
func Erfc(x float64) float64

//go:linkname Exp C.exp
func Exp(x float64) float64

//go:linkname Exp2 C.exp2
func Exp2(x float64) float64

//go:linkname Expm1 C.expm1
func Expm1(x float64) float64

//go:linkname Fdim C.fdim
func Fdim(x, y float64) float64

//go:linkname Floor C.floor
func Floor(x float64) float64

//go:linkname Fma C.fma
func Fma(x, y, z float64) float64

//go:linkname Fmax C.fmax
func Fmax(x, y float64) float64

//go:linkname Fmin C.fmin
func Fmin(x, y float64) float64

//go:linkname Fmod C.fmod
func Fmod(x, y float64) float64

//go:linkname Frexp C.frexp
func Frexp(x float64, exp *c.Int) float64

//go:linkname Gamma C.gamma
func Gamma(x float64) float64

//go:linkname Hypot C.hypot
func Hypot(x, y float64) float64

//go:linkname Ilogb C.ilogb
func Ilogb(x float64) c.Int

//go:linkname J0 C.j0
func J0(x float64) float64

//go:linkname J1 C.j1
func J1(x float64) float64

//go:linkname Jn C.jn
func Jn(n c.Int, x float64) float64

//go:linkname Ldexp C.ldexp
func Ldexp(x float64, exp c.Int) float64

//go:linkname Lgamma C.lgamma
func Lgamma(x float64) float64

//go:linkname Log C.log
func Log(x float64) float64

//go:linkname Log10 C.log10
func Log10(x float64) float64

//go:linkname Log1p C.log1p
func Log1p(x float64) float64

//go:linkname Log2 C.log2
func Log2(x float64) float64

//go:linkname Logb C.logb
func Logb(x float64) float64

//go:linkname Modf C.modf
func Modf(x float64, ipart *float64) float64

//go:linkname Nan C.nan
func Nan(tag *c.Char) float64

//go:linkname Nextafter C.nextafter
func Nextafter(x, y float64) float64

//go:linkname Pow C.pow
func Pow(x, y float64) float64

//go:linkname Remainder C.remainder
func Remainder(x, y float64) float64

//go:linkname Round C.round
func Round(x float64) float64

//go:linkname Sin C.sin
func Sin(x float64) float64

//go:linkname Sinh C.sinh
func Sinh(x float64) float64

//go:linkname Sqrt C.sqrt
func Sqrt(x float64) float64

//go:linkname Tan C.tan
func Tan(x float64) float64

//go:linkname Tanh C.tanh
func Tanh(x float64) float64

//go:linkname Tgamma C.tgamma
func Tgamma(x float64) float64

//go:linkname Trunc C.trunc
func Trunc(x float64) float64

// -----------------------------------------------------------------------------

//go:linkname Acosf C.acosf
func Acosf(x float32) float32

//go:linkname Acoshf C.acoshf
func Acoshf(x float32) float32

//go:linkname Asinf C.asinf
func Asinf(x float32) float32

//go:linkname Asinhf C.asinhf
func Asinhf(x float32) float32

//go:linkname Atanf C.atanf
func Atanf(x float32) float32

//go:linkname Atan2f C.atan2f
func Atan2f(y, x float32) float32

//go:linkname Atanhf C.atanhf
func Atanhf(x float32) float32

//go:linkname Cbrtf C.cbrtf
func Cbrtf(x float32) float32

//go:linkname Ceilf C.ceilf
func Ceilf(x float32) float32

//go:linkname Cosf C.cosf
func Cosf(x float32) float32

//go:linkname Coshf C.coshf
func Coshf(x float32) float32

//go:linkname Copysignf C.copysignf
func Copysignf(x, y float32) float32

//go:linkname Erff C.erff
func Erff(x float32) float32

//go:linkname Erfcf C.erfcf
func Erfcf(x float32) float32

//go:linkname Expf C.expf
func Expf(x float32) float32

//go:linkname Exp2f C.exp2f
func Exp2f(x float32) float32

//go:linkname Expm1f C.expm1f
func Expm1f(x float32) float32

//go:linkname Fdimf C.fdimf
func Fdimf(x, y float32) float32

//go:linkname Floorf C.floorf
func Floorf(x float32) float32

//go:linkname Fmaf C.fmaf
func Fmaf(x, y, z float32) float32

//go:linkname Fmaxf C.fmaxf
func Fmaxf(x, y float32) float32

//go:linkname Fminf C.fminf
func Fminf(x, y float32) float32

//go:linkname Fmodf C.fmodf
func Fmodf(x, y float32) float32

//go:linkname Frexpf C.frexpf
func Frexpf(x float32, exp *c.Int) float32

//go:linkname Gammaf C.gammaf
func Gammaf(x float32) float32

//go:linkname Hypotf C.hypotf
func Hypotf(x, y float32) float32

//go:linkname Ilogbf C.ilogbf
func Ilogbf(x float32) c.Int

//go:linkname J0f C.j0f
func J0f(x float32) float32

//go:linkname J1f C.j1f
func J1f(x float32) float32

//go:linkname Jnf C.jnf
func Jnf(n c.Int, x float32) float32

//go:linkname Ldexpf C.ldexpf
func Ldexpf(x float32, exp c.Int) float32

//go:linkname Lgammaf C.lgammaf
func Lgammaf(x float32) float32

//go:linkname Logf C.logf
func Logf(x float32) float32

//go:linkname Log10f C.log10f
func Log10f(x float32) float32

//go:linkname Log1pf C.log1pf
func Log1pf(x float32) float32

//go:linkname Log2f C.log2f
func Log2f(x float32) float32

//go:linkname Logbf C.logbf
func Logbf(x float32) float32

//go:linkname Modff C.modff
func Modff(x float32, ipart *float32) float32

//go:linkname Nanf C.nanf
func Nanf(tag *c.Char) float32

//go:linkname Nextafterf C.nextafterf
func Nextafterf(x, y float32) float32

//go:linkname Powf C.powf
func Powf(x, y float32) float32

//go:linkname Remainderf C.remainderf
func Remainderf(x, y float32) float32

//go:linkname Roundf C.roundf
func Roundf(x float32) float32

//go:linkname Sinf C.sinf
func Sinf(x float32) float32

//go:linkname Sinhf C.sinhf
func Sinhf(x float32) float32

//go:linkname Sqrtf C.sqrtf
func Sqrtf(x float32) float32

//go:linkname Tanf C.tanf
func Tanf(x float32) float32

//go:linkname Tanhf C.tanhf
func Tanhf(x float32) float32

//go:linkname Tgammaf C.tgammaf
func Tgammaf(x float32) float32

//go:linkname Truncf C.truncf
func Truncf(x float32) float32

// -----------------------------------------------------------------------------
