gpt4 book ai didi

c++ - 我对等式测试 bool 运算符有疑问

转载 作者:行者123 更新时间:2023-11-30 04:43:26 25 4
gpt4 key购买 nike

我有一个程序旨在测试 Side-Angle-Side 三角形的各种实例,但我收到一条警告,我认为我的程序可能会搞砸。

本质上,我有两个 if 语句

if (sideA == sideB * sin(angA))

 else if (sideB > sideA && sideA > sideB * sin(angA))

其中 sideA、sideB 和 angA 都是 double ,angA 以度数输入并通过等式 angA = angA * 3.14159/180 转换为弧度。

我遇到的问题是我的程序在应该读取前者的时候却读取了后者的语句。具体来说,当我输入 sideA 为 5、sideB 为 10 和 angA 为 30 时,表达式 sideB * sin(angA) 被读取为 5。但出于某种原因,而不是将其作为“5 == 5,因此第一个 if 语句应该运行”,正在运行“else if”语句的内容。

在我看来,这个问题不太可能的原因是我对我使用的 PI 位数过于保守,我应该增加它;更可能的原因是我收到的警告

warning: comparing floating point with == or != is unsafe [-Wfloat-equal]
else if (sideA == sideB * sin(angA)) {
^

这是我不知道如何处理的事情,也不知道如何上网。

最佳答案

在比较浮点值是否相等时,您始终应该检查差异是否小于某个阈值。因此,与其检查 a==b,不如检查 abs(a-b) < THRESHOLD(例如,THRESHOLD 类似于 0.001)

这是由于浮点值固有的不准确性,以及即使它看起来很准确,其二进制表示也可能不准确

关于c++ - 我对等式测试 bool 运算符有疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283487/

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