dataBuf[1] = acos(0.130f);
这是我正在运行的代码,但是当我打印出结果时,它显示为1而不是82. dataBuf是一个int16_t数组。所有其他math.h函数在转换时都能正常工作,但是trig函数不起作用。
答案 0 :(得分:2)
math.h
中的三角函数使用弧度,而不是度。您可以通过乘以180 / pi
,(57.29577951308232
)将弧度转换为度数。
acos(0.13)
会返回1.440427347091751
个弧度,乘以57.29577951308232
会得到82.53040768358306
度的结果。
答案 1 :(得分:0)
OP期望结果以度为单位acos()
以弧度为单位返回结果,@Antti Haapala也解释了这一结果。
此外,OP代码经历int
截断而不是舍入。示例:尝试计算90度的结果时。 acos(0)
- > 1.570796...
。当此值转换为度数时,结果可能会比90.0
中的89.999999999...
小int16_t
。如果将其转换为90
,结果将被截断为89而不是dataBuf[1] = (int16_t) round(acos(0.130f) * 180/M_PI);`
// or using float functions
const float r2d = 180/M_PI;
dataBuf[1] = (int16_t) roundf(acosf(0.130f) * r2d);`
所希望的结果。在转换为整数之前,最好舍入浮点值。
typealias DisplayLinkCallback = @objc_block ( CVDisplayLink!, UnsafePointer<CVTimeStamp>, UnsafePointer<CVTimeStamp>, CVOptionFlags, UnsafeMutablePointer<CVOptionFlags>, UnsafeMutablePointer<Void>)->Void
func DisplayLinkSetOutputCallback( displayLink:CVDisplayLink, callback:DisplayLinkCallback )
{
let block:DisplayLinkCallback = callback
let myImp = imp_implementationWithBlock( unsafeBitCast( block, AnyObject.self ) )
let callback = unsafeBitCast( myImp, CVDisplayLinkOutputCallback.self )
CVDisplayLinkSetOutputCallback( displayLink, callback, UnsafeMutablePointer<Void>() )
}
let dl:CVDisplayLink? = {
var linkRef:Unmanaged<CVDisplayLink>?
CVDisplayLinkCreateWithActiveCGDisplays( &linkRef )
return linkRef?.takeUnretainedValue()
}()
let callback = { (
_:CVDisplayLink!,
_:UnsafePointer<CVTimeStamp>,
_:UnsafePointer<CVTimeStamp>,
_:CVOptionFlags,
_:UnsafeMutablePointer<CVOptionFlags>,
_:UnsafeMutablePointer<Void>)->Void in
println("yep")
}
DisplayLinkSetOutputCallback( dl!, callback )
CVDisplayLinkStart( dl! )
NSRunLoop.mainRunLoop().run()