c语言浮点数乘法运算,记C语言浮点数运算处理 "坑" 一则

本文通过一个C语言程序示例,揭示了浮点数运算中的精度问题,指出即使我们知道浮点数不能精确表示,仍可能在编程时犯错。建议使用double类型或在取整前进行四舍五入处理来避免此类问题。
摘要由CSDN通过智能技术生成

看一小段C语言程序:

int main()

{

float x = 1.3;

x = x - (int)x;

int i = (int)(x*);

return ;

}

在你心目中, 变量 I 是怎样的结果?

如果你理所当然地认为是3的话, 那么你就错了~~~

实际结果应该是2.   为什么?

简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999......

因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值..

就算现在你已经知道这个"坑"了, 但还是不小心会犯, 所以务必要牢记~~~

处理办法:

1. 使用精度更高的double.

2. 取整之前四舍五入(加上一个非常小的0.00000.......005, 但要注意浮点数的精度范围), 就像下面这样.

int main()

{

float x = 1.3;

x = x - (int)x;

int i = (int)(x*+0.00005);

return ;

}

同时也要值得注意的是, 这个四舍五入的操作只能用于取整的时候, 你不能加在原浮点值上面改变了原来的浮点数值.

女孩不哭 @ cnblogs.com/memset @ 2014-05-02

js浮点数运算的坑,多少同学有碰到过?

javascript中的数字都是双精度的浮点数. JavaScript中的整数并不是一个独立的数据类型,而是浮点数的一个子集. 浮点数的坑我们看下面的例子 在浏览器的consol

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值