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

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(使用前将#替换为@)

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

  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • 集群():是否可以仅检查文件是否已锁定,而不实际获取锁定(如果没有)?

    我的用例如下 我有一个程序 它强制在任何给定时间只能运行它的一个实例 因此在启动时它总是尝试在标准位置获取锁定文件 并在该文件终止时终止已经被锁定 这一切都工作正常 但现在我想用一个新的命令行选项来增强程序 当指定该选项时 将导致程序只打印
  • 全局变量不好

    好吧 读完这篇文章和一些示例后 我仍然不清楚全局变量的含义 那么你的类中的私有变量是全局的吗 http www c2 com cgi wiki GlobalVariablesAreBad http www c2 com cgi wiki G
  • std::map find 在 C++ 中不起作用[重复]

    这个问题在这里已经有答案了 我使用以下几行创建了一个哈希映射和一个迭代器 std map
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 如何反序列化 XML 文档

    如何反序列化此 XML 文档
  • 如何在 Google Mock 中使用可选参数来模拟方法?

    如何使用可选参数模拟方法谷歌模拟 例如 class A public void set enable bool enabled true class MockA public A MOCK METHOD1 set enable void b
  • 如何在建立上下文时设置连接超时-PrincipalContext

    using PrincipalContext ctx new PrincipalContext ContextType Domain Domain UserName Password UserPrincipal U new UserPrin
  • 以编程方式更新 Wifi 网络

    我正在尝试创建一个程序 当某个 wifi 网络在范围内时 该程序会连接到该网络 即使已经连接到另一个 wifi 也是如此 我在用着简单Wifi https github com DigiExam simplewifi 基本上效果很好 除了在
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 绑定集合的子集

    我有一个ObservableCollection
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 如何检查日期时间是否发生在今天?

    有没有比下面的代码更好的 net 方法来检查 今天 是否发生了 DateTime if newsStory WhenAdded Day DateTime Now Day newsStory WhenAdded Month DateTime
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • 获取 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