当前位置: 首页 > 知识库问答 >
问题:

浮动ε在c和c中不同#

公孙栋
2023-03-14

这么小的问题,出于性能原因,我一直在研究将我的C#代码的一部分移动到C。现在当我看着我的花车。εC#它的值不同于我的C值。

在C#中,微软描述的值为1.401298E-45。

在C中的值,如所述的cp首选项是1.19209e-07;

在这两种语言中,浮点/单数的最小可能值怎么可能不同?

如果我是正确的,二进制值在字节数方面应该相等,甚至可能是它们的二进制值。还是我看错了?

希望有人能帮助我,谢谢!

共有3个答案

计均
2023-03-14

从您引用的链接中,如果您想要类似的东西,您应该使用FLT_TRUE_MIN(“浮点数的最小正值”)。NET单。Epsilon(“大于零的最小正值”)。

刘弘济
2023-03-14

返回机器ε,即1.0和可由浮点类型T表示的下一个值之间的差值。https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon

表示大于零的最小正单个值。这个字段是常量。https://docs.microsoft.com/en-us/dotnet/api/system.single.epsilon?view=net-5.0

C#的next值为0,C的next值为1。两件完全不同的事。

编辑:另一个答案可能更正确

殷德本
2023-03-14

您引用的第二个值是IEEEbinary32值的机器ε。

您引用的第一个值不是机器ε。从您链接的文档中:

Epsilon属性的值不等同于机器ε,它表示由于浮点运算中的舍入而导致的相对误差的上限。

从机器ε的维基变体定义部分:

IEEE标准没有定义术语机器ε和单位舍入,因此使用这些术语的不同定义,这可能会造成一些混淆。

...

以下不同的定义在学术界之外更为广泛:机器ε被定义为1和下一个较大浮点数之间的差。

C#留档正在使用该变体定义。

所以答案是你在比较两种不同类型的ε。

 类似资料:
  • 本文向大家介绍在C / C ++中为浮点数和比较赋一个整数,包括了在C / C ++中为浮点数和比较赋一个整数的使用技巧和注意事项,需要的朋友参考一下 整数是一种数据类型,用于定义一个包含所有正,负或零个非小数值的数字。这些不能有小数。 浮点数是一种数据类型,用于定义具有小数值的数字。这些也可以有小数。 现在,当我们为两者输入相同的值时,我们将检查编译器返回的float和integer值是什么。

  • 问题内容: 所以我在C中使用了Java本机接口的以下代码,但是我想将其转换为C ++,但不确定如何。 Java程序: JNI与C和C ++交互的区别是什么?任何帮助是极大的赞赏。 谢谢,皮特 问题答案: 我曾经有一本书《EssentialJNI》。虽然它有些过时,但今天仍然可以使用。 如果我没记错的话,在C语言中,Java构造只是指针。因此,在您的代码中,“ ”是取消引用指针,以使您可以访问基础方

  • 我正在尝试在Docker容器中安装mongocxx驱动程序,第一步是使用package Manager安装mongo-c驱动程序。我精简的DockerFile: 完成此步骤后,我应该可以按照以下说明安装cxx驱动程序:https://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/ 有人有过在Docker实例中安装的经验吗?你

  • 我正在纠结于一个基本的浮点精度问题。问题就在这里: 运行代码得到“否”

  • 如何在C中格式化一个浮点数以输出到四舍五入的两位小数?我在< code>setw和< code>setprecision上运气不好,因为我的编译器告诉我它们< code >未定义。

  • 我在一个空项目上测试了这一点,但没有发生。 如您所见,当我减去bossPercentage值时,newValue变为2.98023E-08。只有当bossPercentage为0.2F且之前的值为0.2F时才会发生这种情况。差值应该是0.0F,但我不明白为什么我得到的是2.98023E-08。 作为参考,remainingBossPercentage是[GameController]类中的一个属性