Тип C.double
Тип C.double в пакете cgo соответствует
типу double из языка C и представляет собой
64-битное число с плавающей точкой (IEEE 754).
Этот тип используется при передаче вещественных чисел
двойной точности между Go и C функциями.
В Go ему соответствует встроенный тип float64,
поэтому преобразование между ними выполняется
неявно при передаче значений в вызовах C функций.
При работе с C.double важно помнить, что
этот тип является алиасом к float64 в Go,
но используется в контексте cgo для явного указания
на соответствие C типу double.
Это позволяет компилятору правильно генерировать
код для взаимодействия между двумя языками.
Синтаксис
var d C.double
d = 3.14159
// или сразу с инициализацией
pi := C.double(3.14159)
Пример
Давайте создадим переменную типа C.double,
присвоим ей значение и выведем его в консоль:
package main
import "fmt"
/*
#include <math.h>
*/
import "C"
func main() {
var num C.double
num = 2.71828
fmt.Printf("Значение num: %f\n", num)
}
Результат выполнения кода:
"Значение num: 2.718280"
Пример
Тип C.double может использоваться для
передачи чисел в C функции. Рассмотрим пример
вызова математической функции sqrt из
библиотеки math.h:
package main
import "fmt"
/*
#include <math.h>
*/
import "C"
func main() {
value := C.double(16.0)
result := C.sqrt(value)
fmt.Printf("Квадратный корень из 16: %f\n", result)
}
Результат выполнения кода:
"Квадратный корень из 16: 4.000000"
Пример
Тип C.double также может быть получен
как результат работы C функции. В этом примере
мы вычисляем синус числа с помощью C функции
sin:
package main
import "fmt"
/*
#include <math.h>
*/
import "C"
func main() {
angle := C.double(0.785398) // π/4
sinValue := C.sin(angle)
fmt.Printf("Синус π/4: %f\n", sinValue)
}
Результат выполнения кода:
"Синус π/4: 0.707107"
Пример
При работе с C.double можно выполнять
арифметические операции, как с обычными числами
в Go, но с учетом того, что результат также будет
иметь тип C.double:
package main
import "fmt"
import "C"
func main() {
a := C.double(5.5)
b := C.double(2.2)
sum := a + b
diff := a - b
prod := a * b
quot := a / b
fmt.Printf("Сумма: %f\n", sum)
fmt.Printf("Разность: %f\n", diff)
fmt.Printf("Произведение: %f\n", prod)
fmt.Printf("Частное: %f\n", quot)
}
Результат выполнения кода:
"Сумма: 7.700000"
"Разность: 3.300000"
"Произведение: 12.100000"
"Частное: 2.500000"