双精度和浮点比较[重复]

2023-12-01

根据这个帖子,当比较 float 和 double 时,float 应被视为 double。 下面的程序,似乎并不遵循这个说法。这种行为看起来相当不可预测。 这是我的程序:

void main(void)
{
    double a = 1.1;  // 1.5
    float b = 1.1;   // 1.5
    printf("%X  %X\n", a, b);
    if ( a == b)
        cout << "success " <<endl;
    else
        cout << "fail" <<endl;
}
  • 当我运行以下程序时,显示“失败”。
  • 但是,当我将a和b更改为1.5时,它显示“成功”。

我还打印了值的十六进制符号。这两种情况都是不同的。我的编译器是Visual Studio 2005

你能解释一下这个输出吗?谢谢。


float f = 1.1;
double d = 1.1;
if (f == d)

在此比较中,值f被提升为类型double。您看到的问题不在于比较,而在于初始化。1.1不能精确地表示为浮点值,因此存储在f and d是可以表示的最接近的值。但float and double大小不同,因此有效位的数量也不同。当值在f被提升为double,无法找回存储值时丢失的额外位,因此最终会在额外位中得到全零。这些零位与中的位不匹配d,所以比较是错误的。比较成功的原因是1.5就是它1.5 can精确地表示为float并作为double;它的低位有一堆零,因此当促销添加零时,结果与double表示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双精度和浮点比较[重复] 的相关文章

随机推荐

  • 获取 Windows 8 上的电池状态

    我在 Internet 上进行了搜索 发现唯一有一点帮助的是在 Windows Phone 8 上获取电池状态的方法 但我想要在 Windows 8 RT 上使用它 谁能帮我吗 根据我能找到的所有信息 我们无法访问 WinRT 中的 Pow
  • 单击单选按钮加载不同的局部视图

    我正在尝试根据单选按钮选择在单个 div 中加载不同的部分视图 当用户单击 个人 按钮时 应显示部分视图 如果单击 业务 则应显示业务部分视图 我的查看页面代码是
  • 如何让弹出窗口拦截器允许弹出窗口?

    如何让弹出窗口拦截器允许弹出窗口 通常 通过从用户生成的事件的事件处理程序中弹出它们 例如 如果您有一个链接并且用户明确单击它 并且您从onclick由于用户的显式操作 大多数弹出窗口阻止程序都会允许弹出窗口 相反 来自的弹出窗口windo
  • 从 jDateChooser 获取值并保存到 MS sql DB

    我的对话框上有两个 jDateChooser 我想保存到该数据类型有问题的 MS SQL DB 知道如何解决这个问题 仅当我将数据库中的数据类型转换为 nvarchar 并将值转换为从 jDateChooser 返回的字符串时 我才能执行此
  • Unity 中的 Firebase - 禁用持久性

    我正在使用 Firebase 制作 Android 手机游戏 该游戏有一个系统 允许玩家离线玩并根据保存的日期时间从数据库更新 检索数据 该日期时间 写入本地文件中 应该与数据库中保存的日期时间相同 为此 我编写了以下内容 referenc
  • NSDateComponents 问题 - 日期不正确

    我有一个 NSDateComponents 问题 我有两个 NSDate 我试图通过检查它们的年 月和日是否匹配来进行比较 我通过将 NSDate 值转换为这些整数分量来完成此操作 如下所示 NSDate cgiDate is previo
  • 如何从 C# 中的 JSON 字符串获取一些值?

    我有一个字符串 我想从中获取一些值 我的字符串看起来像 string1 r n id 100000280905615 r n name Jerard Jones r n first name Jerard r n last name Jon
  • 即使设置设为“从不”,iOS11 照片库也可以访问

    if UIImagePickerController isSourceTypeAvailable photoLibrary let imagePicker UIImagePickerController imagePicker source
  • android:识别ListView行中的单个项目?

    我在 ListActivity 中有一个由数据库表填充的 ListView ListView 的每一行都是一个relativelayout 其中包含三个依次命名为 rowid date 和 name 的 TextView 我可以使用 Lis
  • SwiftUI .sheet 视图调整大小问题(在 Macos 上测试)

    我有以下示例代码 import SwiftUI struct ContentView View State private var showModal false State private var hmm true var body so
  • protobuf 文本格式是什么样的?

    Google Protocol Buffers 不仅可以以二进制格式序列化 还可以序列化为文本 称为文本原型 然而 我无法轻易找到此类文本的示例 它会是什么样子 预期答案 一个涵盖 protobuf IDL proto 文件允许的所有功能的
  • 如何使用 Ktor 和 Kotlin 下载带有进度指示器的大文件?

    我花了太多时间试图解决这个问题 因此 我在下面发布的代码在下载文件方面确实有效 但问题是 该流程具有非常意外的行为 这response content readAvailable 方法调用似乎会阻塞 直到完全下载整个文件 此时发出进度发生
  • 尝试运行简单的monkeyrunner python脚本,'importerror no module named os'

    我的计算机上安装了 android 模拟器 SDK 并且我正在尝试运行一个简单的 python 脚本 但它在 导入操作系统 行上失败 这应该是标准的 这是我的脚本 import os print os environ PATH 当我针对实际
  • 如何在后台运行计时器?

    我有计时器代码 但如果我更改片段 计时器会重置为 00 00 我希望该计时器在我单击停止或暂停后仍然计数 或者这意味着该计时器仍然在后台计数 怎么做 这是我的代码 public class TimerFragment extends Bas
  • 连接到 Excel 时出现“无法识别 OLE 流”异常

    我试图将我的 Java 程序与 Excel 文件连接起来 我已经做到了这一点 但它抛出了这个异常 无法识别 OLE 流 请帮我完成这个工作 import jxl import java io public class excel publi
  • 是否有可能让 Java 忽略“信任存储”并只接受它获得的任何 SSL 证书?

    我正在尝试编写一个使用 javax mail API 发送邮件的 SSL 客户端 我遇到的问题是服务器请求我使用 SSL 但服务器还配置了非标准 SSL 证书 我发现的网页说我需要将证书安装到信任存储中 我不想这样做 我没有必要的权限 有没
  • 如何制作孤立的 dalvik

    我正在追踪 Dalvik 机器源代码 据此 我想让 Dalvik 可以运行 我似乎有 dvk 项目 但也存在很多问题导致故障 有没有什么方法可以只制作dalvik而无需所有android 因为制作android会花费太多时间 大约很多小时
  • 提高 git status 性能的方法

    我在一台位于 NFS 上的 Linux 机器上有一个 10 GB 的存储库 第一次git status需要 36 分钟及后续时间git status需要 8 分钟 看来 Git 依赖于操作系统来缓存文件 只有第一个git命令如commit
  • Java EE 和 JDK

    我想从 Java SE 迁移到 Java EE 我将使用 Java EE 附带的一些示例项目 我已经卸载了 JDK 但我认为这可能是一个错误 当我下载最新的 Java EE 6 时 安装时它会询问我 JDK 已卸载 的位置 我的印象是 JD
  • 双精度和浮点比较[重复]

    这个问题在这里已经有答案了 根据这个帖子 当比较 float 和 double 时 float 应被视为 double 下面的程序 似乎并不遵循这个说法 这种行为看起来相当不可预测 这是我的程序 void main void double