#1835. 浮点数精度
浮点数精度
题目描述
楠枫学习编程的过程中遇到了一个大麻烦,他发现作为人类智慧的结晶 —— 计算机,竟然无法正确的计算加法,他觉得很不可思议!比如 是正确的,可是当他编程时程序的判断却是错误的。他的代码大致如下。
后来老师告诉他,这是因为计算机用二进制存储数据,有可能无法精确地表示某些十进制小数,所以两者判等时出错。
既然知道了原因,楠枫打算找一找这种在计算上本该相等,却在程序判等时不一致的数。他的寻找方法如下:
对于含有 位小数的数字 (数字 除最后一位数位不为 外,其余都为 ,如含有 位的小数 ),按如下步骤操作:
- 通过 获得的数字 非零位上的数字 ;
- 把 扩大 倍后再除以 ,以获得与 的 倍对应的浮点数 ;
- 通过程序将 个 加起来的和与 直接进行判等。
其中, 是一个正整数,为了获得更多数据,楠枫会把 从 枚举到 ,也就是他会按上述步骤判等 次,依次检查 的 倍、 倍、 倍 ...... 倍。如果发现判等结果不成立,将会按要求打印一个不等式,格式为:
$ \underbrace{d + d + \cdots + d}_{k \text{个} d} \neq v $
输入格式
第一行两个整数,表示最大的倍数 和小数位数 ;
第二行一个小数,代表要检查的小数 。
输出格式
如果有判等结果不成立,就输出一行不等式( 、 要保留 位小数);如果所有的判等结果都成立,输出内容为空。
样例
10 1
0.1
0.1 + 0.1 + 0.1 != 0.3
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 != 0.8
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 != 0.9
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 != 1.0
10 3
0.001
0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 != 0.009
0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 + 0.001 != 0.010
样例解释
对于样例, ,当 分别等于 时,判等结果不成立,因此会输出 行不等式。
数据范围