You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

if语句无法正确判断浮点数近似相等问题求助

C++习题调试:浮点数差值判断问题

问题根源

你的代码存在两个核心问题:

  • 判断逻辑完全不符合要求:习题要求当两数差值小于1.0/100(即0.01)时输出提示,但你写的是i - j == 0.01——这只会在两数刚好相差0.01时触发,而且浮点数的精度特性会导致这个条件几乎不会命中(比如实际计算出的差值可能是0.0099999999999998)。
  • 分支顺序与逻辑错误:原代码把"几乎相等"的判断放在最前面,会覆盖后续的大小关系判断,而且没有考虑差值为负数的情况(比如i比j小0.005时,i-j是-0.005,不等于0.01,就不会触发提示)。

修正后的代码

#include <iostream>
#include <cmath>  // 用于浮点数绝对值计算

int main() {
    double i = 0;
    double j = 0;
    while (std::cin >> i >> j) {
        std::cout << "\n";
        std::cout << i << "\t" << j << "\n\n";
        
        // 先输出大小关系或相等结果
        if (i == j) {
            std::cout << "The Numbers Are Equal\n";
        } else if (i > j) {
            std::cout << "The Larger Value Is " << i << "\n";
        } else {
            std::cout << "The Larger Value Is " << j << "\n";
        }
        
        // 判断是否几乎相等并输出提示
        const double threshold = 1.0 / 100;
        if (std::abs(i - j) < threshold) {
            std::cout << "THE NUMBERS ARE ALMOST EQUAL\n";
        }
    }
    return 0;
}

关键修改说明

  1. 使用绝对值判断差值:std::abs(i - j)确保无论i和j谁大谁小,都能正确计算差值的绝对值,避免负数差值导致的判断失误。
  2. 替换为范围判断:用< threshold代替== 0.01,符合习题"差值小于0.01"的要求,同时避开浮点数直接相等比较的精度陷阱。
  3. 调整逻辑顺序:先输出大小关系或相等结果,再判断并输出"几乎相等"的提示,完全匹配习题的输出要求。
  4. 定义阈值常量:用const double threshold = 1.0 / 100代替硬编码的0.01,让代码更易读且符合习题描述。

内容的提问来源于stack exchange,提问作者Jconnors266

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:14:54