Golang math 패키지 Floor에 함수체 없음
2458 단어 Golang
missing function body
.코드는 다음과 같습니다.
// Trunc returns the integer value of x.
//
// Special cases are:
// Trunc(±0) = ±0
// Trunc(±Inf) = ±Inf
// Trunc(NaN) = NaN
func Trunc(x float64) float64
func trunc(x float64) float64 {
if x == 0 || IsNaN(x) || IsInf(x, 0) {
return x
}
d, _ := Modf(x)
return d
}
두 가지 질문:
func Trunc(x float64) float64
이런 문법은 무엇인지, 어디서 나온 문법, 출처가 무엇인지func trunc(x float64) float64 {...}
와 이 함수는 어떤 관계입니까무엇
먼저 이것이 무엇인지 설명한다. 사실 이것은 함수 성명이다. 진정한 함수 주체는 어셈블리로 이루어진 것이다. 만약에 원본 코드를 보면 이 함수는math 패키지 아래의floor에서 나온다.go 파일, 이 파일이 있는 폴더에는 다음과 같은 파일이 있습니다.
floor_386.s
floor_amd64.s
floor_amd64p32.s
floor_arm.s
floor_arm64.s
floor_ppc64x.s
floor_s390x.s
floor_wasm.s
floor.go의 함수 성명은 모두 어셈블리 파일에서 이루어진 것이다
문법의 출처는 Golangspec을 참고하는 것으로 원리는
A function declaration may omit the body. Such a declaration provides the signature for a 》 function implemented outside Go, such as an assembly routine.
func min(x int, y int) int {
if x < y {
return x
}
return y
}
func flushICache(begin, end uintptr) // implemented externally
함수 성명은 본문을 생략할 수 있다는 뜻이다.이러한 성명은 Go 이외에 이 함수를 실현하기 위해 서명을 제공했다. 예를 들어 어셈블리 프로그램이다.
연관성
func trunc(x float64) float64 {...}
이 성명과 무슨 관계가 있습니까?참고 링크의 해석에 의하면 이것은 Golang의 예비 실현이다. 예를 들어 floorarm.s에서 Trunc를 실현할 때 오히려 골롱의 실현을 호출하여 참고와 테스트로 사용할 수 있다.
floor_arm.s
#include "textflag.h"
TEXT ·Floor(SB),NOSPLIT,$0
B ·floor(SB)
TEXT ·Ceil(SB),NOSPLIT,$0
B ·ceil(SB)
TEXT ·Trunc(SB),NOSPLIT,$0
B ·trunc(SB)
여기 있는
.trunc
등은 바로 호출된 골랑이 실현한 거예요.참조 링크:
Bodiless function in Golang
golang spec - function declarations
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Golang 구현 대기열 및 스택대기열: 스택: github 주소:https://github.com/golibec/Lstruct.git 후속적으로 각종 데이터 구조와 주류 알고리즘을 지속적으로 보완할 것이다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.