浮点数的哈希函数

2024-04-16

我目前正在 C++ 中实现一个哈希表,并且正在尝试为浮点数创建一个哈希函数......

我本来打算通过填充小数来将浮点数视为整数,但后来我意识到我可能会用大数字来溢出......

有没有好的方法来散列浮点数?

您不必直接给我该功能,但我想看到/理解不同的概念......

Notes:

  1. 我不需要它非常快,只要可能的话均匀分布即可。

  2. 我读过,由于计算速度的原因,不应对浮点数进行哈希处理,有人可以确认/解释这一点,并给出为什么浮点数不应进行哈希处理的其他原因吗?我真的不明白为什么(除了速度)


这取决于应用程序,但大多数情况下浮点数不应该被散列,因为散列用于快速查找精确匹配,并且大多数浮点数是产生浮点数的计算结果,该浮点数只是正确答案的近似值。检查浮动相等性的通常方法是检查它是否在正确答案的某个增量(绝对值)内。这种类型的检查不适用于散列查找表。

EDIT:

通常,由于舍入误差和浮点运算的固有限制,如果您期望浮点数a and b应该彼此相等,因为数学是这样说的,你需要选择一些相对地 small delta > 0,然后你声明a and b相等,如果abs(a-b) < delta, where abs是绝对值函数。有关更多详细信息,请参阅本文 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html.

这是一个演示该问题的小示例:

float x = 1.0f;
x = x / 41;
x = x * 41;
if (x != 1.0f)
{
    std::cout << "ooops...\n";
}

根据您的平台、编译器和优化级别,这可能会打印ooops...到你的屏幕上,这意味着数学方程x / y * y = x不一定保存在您的计算机上。

在某些情况下,浮点运算会产生精确的结果,例如大小合理的整数和具有 2 次方分母的有理数。

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

浮点数的哈希函数 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 登录 Scala

    在 Java 中 日志记录的标准习惯用法是为记录器对象创建一个静态变量 并在各种方法中使用它 在 Scala 中 习惯用法似乎是使用 logger 成员创建 Logging 特征 并将该特征混合到具体类中 这意味着每次创建对象时 它都会调用
  • 如何根据方向改变屏幕布局?

    在肖像中我有 5 个图标 第一行有 4 个图标 第二行有 1 个图标 但在横向中 第五个图标必须适合第一行 怎么解决这个问题 对于纵向和横向位置使用不同的布局文件 使用layout land用于风景位置 当方向改变时 Android 会自动
  • 优化 MySQL 插入以处理数据流

    我正在使用高速数据流并执行以下步骤将数据存储在 MySQL 数据库中 对于每件新到货的商品 1 解析传入项 2 执行几次 INSERT ON DUPLICATE KEY UPDATE 我用过插入 重复密钥更新 http dev mysql
  • 查找给定范围内给定数字的整数个数的算法

    如果我以列表的形式得到完整的数字集list我想知道它们在给定范围内可以形成多少个 有效 整数 A B 我可以使用什么算法来有效地完成它 例如 给定一个数字列表 包含重复项和零 list 5 3 3 2 0 0 我想知道这个范围内可以组成多少
  • 为什么字体名称需要引号?

    据我所知 如果字体包含空格 则需要使用双引号或单引号 例如 font family Times New Roman Times font family Times New Roman Times 但在谷歌字体上 http www googl
  • Git:区分本地和远程标签

    如果远程存储库中有标签 我通常会在拉取时自动获取它们 当我删除创建的本地标签时 git tag d
  • Hudson 基于 URL 令牌构建

    我配置了一个 hudson 实例并创建了作业 创建构建时 我能够看到此选项 通过访问此 URL SecretTOKEN 触发构建 选项 现在 我无法在我创造的任何新工作中看到这一点 我是否缺少某些设置或配置 我所做的唯一更改是将 servl
  • C# 中的委托数组

    我正在尝试从委托数组调用委托函数 我已经能够创建委托数组 但是如何调用委托呢 public delegate void pd public static class MyClass static void p1 static void p2
  • Spring 提供静态内容,同时具有通配符控制器路由

    我的应用程序是在前端使用骨干和后端使用 spring 框架构建的 这是一个单一的 html 应用程序 路由由骨干网处理 因此我有一个具有以下结构的后端路由 RequestMapping value method RequestMethod
  • 如何调用maven默认生命周期

    如果我打电话 mvn clean install maven知道clean是一个生命周期 install是默认生命周期的一个阶段 如果我打电话 mvn deploy maven 将按顺序执行默认生命周期的所有阶段 有没有办法通过给出生命周期
  • Mac OS X:尝试链接(ld)到框架

    我正在阅读 Mark 和 Aaron 所著的 高级 Mac OS X 编程 我无法让一个终端语句正常工作 cc g o useadd F Adder build framework 加法器 useadd m 它位于第 45 页 第 3 章
  • Angular2 - 多个依赖的顺序 http api 调用

    我正在构建一个 Angular2 应用程序 其中一个组件需要进行多个 API 调用 这些调用依赖于之前的调用 我目前有一项服务可以调用 API 来获取电视节目列表 对于每个节目 我需要多次调用不同的 API 来逐步检查该结构 以确定该节目是
  • 在rocker/shiny docker中部署shiny应用程序

    嗯 我是新来的Docker我需要在 Docker 容器中实现一个闪亮的应用程序 我有来自的图像https hub docker com r rocker shiny https hub docker com r rocker shiny 包
  • 操作链接到同一页面

    我需要创建一个 html 操作链接 相当于 a href Test Link a 或当前页面的操作链接 有人有例子吗 你可以尝试用这个 a href Url Action null Test Link a 帮手Url Action第一个参数
  • SQL 查询 C# 的 In 子句中的多个 ID [已关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我基本上想在 sql 查询的 In 子句中使用多个 iD 现在我有两个选择 一个是从文本框中获取逗号分隔的 ID 或者我可以放置一个列表视图
  • MySQL临时表是共享资源吗?

    我有一个使用临时表的 MySQL 存储过程 假设我的表名称是 temp 我用它来存储一些中间数据 它将在程序开始时创建 并在程序结束时删除 CREATE PROCEDURE p BEGIN CREATE TEMPORARY TABLE te
  • 堆中的 siftUp 和 siftDown 操作用于堆化数组

    假设 MAX HEAPIFY 操作 其中父元素值大于其子元素值 siftDown 将太小的节点与其最大的子节点交换 从而将其向下移动 直到它至少与两个节点一样大 在它下面 siftUp 将太大的节点与其父节点交换 从而移动 直到它不大于它上
  • 如何在 android O 的系统设置中对通知渠道进行排序

    我有预设的通知渠道顺序 可以更改 如何更改通知渠道的顺序 我尝试按channel id和channel name排序 但不起作用 我的解决方案有错误 我尝试在频道 ID 的开头添加频道数以进行排序 所以我有这个 56 server chan
  • 在iOS中,使用故事板,如何在容器视图内设置视图控制器?

    我在主故事板中创建并绘制了一个名为 AutocompleteVC 的自定义 UIViewController AutocompleteVC 将用于几个不同的地方 故事板和不同的维度 例如 在我的 Transit 故事板中 如下所示 有一个名
  • 浮点数的哈希函数

    我目前正在 C 中实现一个哈希表 并且正在尝试为浮点数创建一个哈希函数 我本来打算通过填充小数来将浮点数视为整数 但后来我意识到我可能会用大数字来溢出 有没有好的方法来散列浮点数 您不必直接给我该功能 但我想看到 理解不同的概念 Notes