gpt4 book ai didi

c - 在 sigmoid 传递函数中用整数替换 float 学

转载 作者:行者123 更新时间:2023-12-05 03:14:46 25 4
gpt4 key购买 nike

我想在不损失太多精度的情况下替换这些函数中的 float 学,因为我没有 FPU。这可能吗?我认为逗号后的 3 个数字就足够了。

inline float smaller_f(float value, float bias) {
return value < bias ? value : bias;
}

inline float pow2_f(float fVal) {
return fVal * fVal;
}

float sigm_f(float fX, float fSlope) {
float fVal = (180.f - smaller_f(fabs(fSlope * fX), 179.9f) ) / 180.f;
return fVal / sqrt(1.f + pow2_f(fVal) );
}

最佳答案

您需要一个定点数学库。我的首选解决方案是 Anthony Williams' fixed-Point math C++ library .因为它在 C++ 中并且定义了一个具有广泛函数和运算符重载的 fixed 类,所以它在很大程度上可以简单地通过替换 floatdouble 来使用已修复 的现有代码。它使用 int64_t 作为基础整数数据类型,具有 34 位整数位和 28 位小数位 (34Q28),因此适用于大约 8 位小数和比 int32_t 更宽的范围.

如果您的编译器支持 C++,您仍然可以根据需要使用基本的 C 子集编写代码,仅使用 C++ 来支持此库。

在 32 位 ARM 上,该库的执行速度比软件浮点运算快约 5 倍,并且在性能上可与 ARM 的 C 代码 VFP 单元相媲美。

请注意,此库中的 sqrt() 函数对于非常小的值精度性能较差,因为它在中间计算中丢失了可以保留的低位。可以通过将其替换为我在 this question 中提供的版本的代码来改进它.

毫无疑问,定点数学有 C 库,但它们将缺乏该库提供的“真实”定点数据类型的简单性和便利性,并且该库具有一套完整的标准库数学函数等价物,而许多定点解决方案仅提供基本算术运算符。

关于c - 在 sigmoid 传递函数中用整数替换 float 学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22893896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com