以特定精度将小值与零进行比较

标签 c decimal floating-accuracy

我有一个程序可以打印出一个值非常小的矩阵。我的矩阵的一个例子是

0.00000000000000004  0.12300000000000000

0.00000000011111114  0.00000000000038544

我想做的是将每个值与 进行比较,并接受它为 并具有特定的精度,即小数点后 9 位。换句话说,如果一个数字有 9 个 作为它的第一个十进制值,我想将它视为一个 ,否则不是。

我搜索了很多,但真的一无所获。有什么想法吗?

最佳答案

正如我在评论中指出的那样,您可以简单地比较 float f通过-1e-9 < f < 1e-9 .

您需要正边界和负边界,以确保它适用于正数和负数。您使用 1e-9而不是 1e-10因为如果一个数字小于 1e-9 , 一个有 8 个小数位 0 的数,那么它有 9 个或更多个小数位的零。

请注意,由于 1e-9 的 float 舍入从十进制转换为二进制时,您可能会看到一些舍入错误。

关于以特定精度将小值与零进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822096/

相关文章:

c - Memset 指针错误

c - 为什么保存受限指针的值不会给出未定义的行为?

sql - 总和中的小数舍入?

math - float 学有问题吗?

Python float silent overflow 精度错误

c# - 我什么时候会遇到C#中Double类型的问题(比特币的小数点后8位)?

c++ - C++0x 是否支持 __stdcall 或 extern "C"capture-nothing lambdas?

c - 在C中将Sqlite表格式化为字符串(char)?

hex - 如何在 Scratch 中快速从十六进制转换为十进制?

ruby - 如何让 ruby 显示更多的小数位?