微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

64位无符号int到float转换的未定义参考错误

如何解决64位无符号int到float转换的未定义参考错误

get_float64()中的此行显示错误

“未定义对__aeabi_ul2d的引用”

我认为类似的get_float32()不会出现这种问题。 get_float64()函数在这里可能有什么问题?

fvalue = static_cast<double>(value);  //Showing up error while compiling for GCC..


float get_float32()
{
    float fvalue(0.0f);
    uInt32 value = retrieve_uInt32();//Return 32bit Unsigned int value
    fvalue = static_cast<Float32>(value); //No error here for float32
    return fvalue;
}

double get_float64()
{
    double fvalue = static_cast<double>(0.0f);
    uInt64 value = retrieve_uInt64(); //Return 64bit Unsigned int value
    fvalue = static_cast<double>(value);  //Showing up error while compiling for GCC.. undefined reference to `__aeabi_ul2d
    return fvalue;
}

我不想在这里使用reinterpret_cast,这会引发-Wstrict-aliasing错误。使用下面的代码使用-O2选项发出警告

warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
fvalue = *reinterpret_cast<Float64*>(&value);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。