c - 如何提高浮点值的准确性?
问题描述
我正在编写一个对基数为 4 的数字进行操作的程序。如何使值更准确?
我有一个十进制数 0.668,我将其转换为 base-4。它应该是 0.222300,但它存储为 0.222299,这给出了非常不准确的结果,因为它应该是一个以 4 为基数的数字。我读过浮点运算,但我找不到提高 c 语言中数字准确性的方法。我很想使用 long double,但我找不到打印 long double 值的方法。我不知道这是否重要,但我将代码块与 mingw 一起使用。
编辑:@EricPostpischil 回答了我的问题。
解决方案
您似乎正在尝试使用“十进制编码的 base-4”格式。也就是说,给定一个以 4 为基数的数字 (.222300 4 ),您将其重新解释为十进制数字 (.222300 10 ),然后将十进制数字的数值存储在 afloat
或 adouble
中。然后,因为您使用的 C 实现使用基于二进制的float
or double
,所以您最终会得到二进制表示,当从十进制数字的值转换时,这当然会引入错误。对此的主要解决方案是:不要那样做。没有理由使用十进制。
由于您有以 4 为基数的数字,因此只需将以 4 为基数的数字粘贴在某些位中即可。选择一个无符号整数类型,并为每个基数为 4 的数字使用其中的两个位。或者,如果您必须使用浮点,则为每个以 4 为基数的数字使用其中的两个位。用or表示 .222300 4,用 0 除以 4,加 0,除以 4,加 3,除以 4,加 2,除以 4,加 2,除以 4,加 2,除以 4。结果将是准确的,然后您可以在or中本地进行算术运算。然后你只需要转换例程:一个用于将base-4 数字转换为内部格式的输入,一个用于将内部格式转换为base-4 数字的输出。float
double
float
double
推荐阅读
- swift - 按下活动标签栏时如何加载 WKWebview 转到根页面?
- jekyll - 向 GitHub 企业实例添加远程主题?
- java - 执行 .sql 脚本文件的 ProcessBuilder 挂起
- spring - Spring Boot - 如何在没有会话存储的情况下永久保留 JSESSIONID
- ng-bootstrap - 如何计算数据之间的差异或比较(是否更大)(Jalali 日历)
- python-3.x - 如何在 ubuntu 上使用 cmake 在 python 虚拟环境(conda)中构建和安装 flann 和其他库
- datagridview - 如果 C# datagridview 行求和
- .net - vb.net, Xtrareport :如何在 Xrtable 扩展的每个页面上显示 Xrtable 的标题?
- dns - DNS 从 Godaddy 更改为 Netlify
- excel - 使用VBA查找段落中文本的位置