Java中浮点除法中的严重数字损坏? [复制]

Posted

技术标签:

【中文标题】Java中浮点除法中的严重数字损坏? [复制]【英文标题】:Heavy number corruption in floating point division in Java? [duplicate] 【发布时间】:2020-12-11 04:52:54 【问题描述】:

我一直在尝试用 java 浮点除法做一些简单的事情,已经阅读了几篇关于值的一些最小变化的文章,但没有像下面这样。

这是预期的:

float f = 1789773f / 1000000f;
System.out.printf("\n%.2f", f);

Outputs: 1,79

当我使用变量时会发生这种情况:

int CLOCK=1789773;
System.out.printf("\n%.2f", (float)CLOCK/(10^6));

Outputs: 13410,48

发生了什么事?我必须使用文字 '1000000f' 而不是 10^6 才能使其工作。另外,我认为使用 (float) 转换除法元素之一会将所有内容设置为浮点数,并且我不会结束整数数学运算。

【问题讨论】:

供参考:^ 是位异或运算符,属于bitwise operators。 【参考方案1】:

10^6 不是一百万。它是 12,因为^ 是按位异或运算符而不是求幂。

使用1e6f,或只使用1000000f

【讨论】:

【参考方案2】:

尝试改用这个:

int CLOCK = 1789773;
float fclock = (float) (CLOCK/(Math.pow(10,6)));
System.out.printf("\n%.2f", fclock);

【讨论】:

【参考方案3】:
float CLOCK=1789773f;
System.out.printf("\n%.2f", CLOCK/Math.pow(10,6));

OR

int CLOCK=1789773;
System.out.printf("\n%.2f",(float) (CLOCK/Math.pow(10,6)));

尝试使用 Math.pow(10,6),它对我来说很好用。

【讨论】:

以上是关于Java中浮点除法中的严重数字损坏? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java里怎么算除法?

STM32 M0和M3内核单片机做浮点除法运算和整型除法运算,分别的用时。希望能给大概数据参考。

解决“浮点上下文中的整数除法”警告

系统 Verilog 中的浮点除法

浮点异常(Core Dumped)在汇编时进行除法

无法将除法结果转换为浮点或十进制类型