gpt4 book ai didi

objective-c - 为了支持小数字,我的变量应该是什么样的?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:12 26 4
gpt4 key购买 nike

我有这个代码:

return 1.0 / (1 + exp(-x));

它用于计算给定 x 的 sigmoid 函数的值。问题是它总是返回 1.00000

我开始检查代码以查看它失败的地方,然后我得到了这个:

long double expV = exp(-x);
long double btm = (1 + expV);
long double calc = 1.0 / btw;

现在变量的值是:

(long double) expV = 3.0356148105583944943E-165
(long double) btm = 1
(long double) calc = 1

所以我的问题是如何解决这个问题,我应该为变量使用另一种类型还是应该更改代码中的某些内容?

更新BTM应为值(value):1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044HAMPH,WWOLHAM HAPY411111111104111111041111。

x 的值为 1,x 的类型为 double 而非 long double。我将其更改为 long double 并报告。

最佳答案

这里的问题是 long double 的精度不足以处理这么小的加法(在 btm 的情况下)。 '1' 比微小的 expV 更重要,因此,在 long double 的精度内,btm 仅为 1。

在回答你的问题时,你的代码很好:逻辑上没有错,你只需要更精确的数据类型。不幸的是,Objective-C 没有提供 (some discussion here about arbitrary precision in Objective-C) .但是,如果您愿意走得更远一点,the GNU MP library (和其他人)将能够帮助你解决任意精度的数学问题。当然,任意精度数学是以性能为代价的——遗憾的是天下没有免费的午餐。

关于objective-c - 为了支持小数字,我的变量应该是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044380/

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