如何仅使用 math.h 将双精度数转换为字符串?

2024-01-28

我正在尝试将双精度数转换为本机 NT 应用程序中的字符串,即仅依赖于ntdll.dll。不幸的是,ntdll 的版本vsnprintf不支持%f等,迫使我自己实现转换。

之前所提ntdll.dll只出口其中的一小部分math.h功能 (floor, ceil, log, pow,...)。然而,我有理由确信我可以实现任何不可用的math.h如果需要的话可以使用函数。

GNU 的 libc 中有一个浮点转换的实现,但是代码非常密集并且难以理解(GNU 缩进风格在这里没有帮助)。

我已经通过标准化数字来实现转换(即将数字乘以/除以 10,直到它位于区间内)[1, 10)),然后通过用以下命令切除整数部分来生成每个数字modf并将小数部分乘以 10。这可行,但会损失精度(只有前 15 位数字是正确的)。当然,精度损失是算法固有的。

我会选择 17 位数字,但是能够正确生成任意数量数字的算法将是首选。

您能否建议一个算法或为我指出一个好的资源?


双精度数的精度不超过 15 位有效(小数)位数。你绝对不可能得到“正确的任意位数”;doubles 不是大数。

既然您说您对 17 位有效数字感到满意,请使用long double;我想,在 Windows 上,这将为您提供 19 位有效数字。

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

如何仅使用 math.h 将双精度数转换为字符串? 的相关文章

随机推荐

  • Python 3.6 quit() 移植到 exe 后不起作用

    我有一个小的 tkinter gui 可以生成一些报告 我在其中内置了一个退出按钮 当我启动脚本时 该按钮工作正常 但我使用 cx freeze 将其转换为 exe 并且除了退出按钮之外 整个程序都在工作 def quits quit 我创
  • 如何用php获取文件的相对路径

    我正在尝试捕获文件的相对路径以创建共享链接 从我的httpdocs网络服务器上的文件夹 我的文件在这里 jack single uploads folder1 image jpg The var dir file给我这个输出 uploads
  • 如何从 BlazeDS 获取强类型集合?

    我已通过 BlazeDS 将 Spring bean 暴露给我的 Flex 应用程序 在我的 Java 代码中 我返回强类型列表 例如 public List
  • 为什么clearTimeout没有清除这个react组件中的超时?

    我试图在启动新的超时之前清除以前的超时 因为我希望消息显示 4 秒并消失 除非在 4 秒结束之前弹出新消息 问题 旧的超时正在清除当前消息 因此在这种情况下 clearTimeout 在此组件中不起作用 let t t for timer
  • 在 Chrome 中,如何使样式选择菜单的宽度达到父容器的 100%?

    我正在创建一个带有文本框和样式选择菜单的表单 本质上是一个 DIV 其中包含其他 DIV 我希望这两个项目具有相同的宽度 最好不是固定的像素宽度 而是 100 的可用空间 我有 div class field div
  • 模型属于任一/或多于一个模型

    是否有可能拥有一个属于 或 或 多个模型的模型 例如 在我的项目中 我有一个订阅模型 可能属于一个人或一个组 当一个人加入某个特定组时 她会自动 继承 该组的订阅 我成立了以下协会 亲自 rb has many subscriptions
  • 悬停时在不同 div 上显示子菜单

    您好 请查看以下 html document ready function sub on mouseenter function event second menu addClass show no sub on mouseenter fu
  • 在 rrapply::rrapply() 中保留空列表

    是否有一个选项允许我保留具有 0 长度列表值的列表条目how melt 选项 在下面 我想保留B and E条目 注意 当我在这里有一个更简单的表示时 akrun 给出了一个初始解决方案 我没有 0 长度列表 E在原来的 我最初接受了 意识
  • 调试设计时包时启动 Delphi 时出错

    我在启动 Delphi 2010 的第二个实例来调试设计时包时遇到问题 在项目选项 调试器下 我使用 C Program Files Embarcadero RAD Studio 7 0 bin bds exe 作为主机应用程序 并具有以下
  • iPhone 设备 3.0 静态库中的类别

    我的静态库中有类别 任何应用程序开发人员都应该将 ObjC 标志设置为 其他链接器标志 才能正确使用我的静态库 它适用于 iPhone 设备 iPhone Simulator 2 x 和 iPhone Simulator 3 0 但在 iP
  • 如何处理 Spring Data JPA 中 ID 数组的批量删除?

    现在我有一个 User 类 我得到一个请求数据array来自jsp or html 列出这个Integer arr 5 6 9 10 62 52 21 然后我使用两种方法来完成批量删除操作 Transactional Override pu
  • UIImageView 缓存策略 - AFNewtorking

    我的应用程序中有几个 UIImageView 我使用 AFNetworkingsetImageWithURL从我的服务器填充图像 文档说这个方法使用标准的 UIImageView 缓存策略 我的问题是 如果我更新服务器上的图像 该图像不会很
  • 使用 R 将列名称插入其值

    我需要将列名称 部门插入其值中 我有这样的代码 Department lt c Store1 Store2 Store3 Store4 Store5 Department2 lt c IT1 IT2 IT3 IT4 IT5 x lt c 1
  • 避免重复输入 mysql 数据库的最佳方法

    我有一个包含 3 列的表 id pk pageId fk 名称 我有一个 php 脚本 它将大约 5000 条记录转储到表中 其中大约一半是重复的 具有相同的 pageId 和名称 pageId 和名称的组合应该是唯一的 当我在 php 中
  • 使用预填充表单,仅提交更改的字段

    我有一个使用选择和文本输入的 html 表单 该表单预先填充了默认值 如何仅提交用户更改默认值的输入 请注意 该页面将存储在空间有限的嵌入式系统中 因此不可能使用 javascript 库 示例 HTML
  • 我正在与 requirejs 优化器和非 AMD 模块作斗争

    我正在与 requirejs 优化器作斗争 如果我只是将其加载到浏览器中而不进行优化 则该代码将起作用 如果我运行优化器 我会得到 ENOENT no such file or directory C Users dev checkout
  • ServletContainerInitializer 中 contextDestroyed() 的等价物是什么?

    我必须创建一个实现的类ServletContextListener https docs oracle com javaee 7 api javax servlet ServletContextListener html在Tomcat初始化
  • 模板中的 Latex 指令导致“unicode 转义错误”

    我想在 play Framework 2 0 模板中包含一些 LaTEX 代码 即 usepackage T1 fontenc usepackage latin9 inputenc usepackage babel 当然玩抱怨error i
  • 当属性名称包含空格和保留字时,将 JSON 映射到 C# 类

    我正在使用 REST API 服务 在服务响应 JSON 中 存在包含空格和保留字的属性名称 我试图将其映射到 C 类 但无法分配与字段名称相同的属性名称 目前 只有当字段的 JSON 属性和 C 类名完全匹配时 映射才会成功 否则该值将如
  • 如何仅使用 math.h 将双精度数转换为字符串?

    我正在尝试将双精度数转换为本机 NT 应用程序中的字符串 即仅依赖于ntdll dll 不幸的是 ntdll 的版本vsnprintf不支持 f等 迫使我自己实现转换 之前所提ntdll dll只出口其中的一小部分math h功能 floo