精度!精度(精确到小树点后20位)
Description
如今是信息化社会,是数据大爆炸的时代,而与数据其中一个很重要的属性就是数据精度。所谓差之毫厘,谬以千里。在数据精度上便能充分体现。
1991年海湾战争中,爱国者导弹因截断误差导致拦截失败,导弹击中了美军导致28人丧生。最后调查发现是因为导弹系统采用的为24位位模式,无法精确的表示0.1秒,最终导致误差达到了0.3443秒。
那么现在你知道了精度的重要性,我们来体验一下吧。这里有n个分数,a1...ana1…an,你要做的是计算ai∗ai∗ai−1ai−1 (2≤i≤n)(2≤i≤n)的值,精确到小数点后20位。
Input
第一行输入一个整数n(2<n<100)n(2<n<100);接下来nn行输入nn个分数,对于每一个分数,分子与分母以空格分隔(格式:分子 分母)(分子分母均小于等于104104)。
Output
输出n−1n−1行,对于每一个ai∗ai−1(2≤i≤n)ai∗ai−1(2≤i≤n);输出一个值(不四舍五入),按ii的从小到大输出。
代码
代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
int a[100],b[100],count;
int main()
{
int n;
cin>>n;
for(int i = 0;i < n ;i++)
{
cin>>a[i]>>b[i];
}
for(int i = 0;i < n – 1;i++)
{
count = 1;
int t1,t2;
t1 = a[i+1]*a[i];
t2 = b[i + 1]*b[i];
if(t2 == 0)
{
break;
}
else
{
if((t1 < 0&&t2 > 0) || (t1 > 0&&t2 < 0))
{
t1 = -t1;
cout<<“-“;
}
cout<<t1/t2<<“.”;
while(count<=20)
{
t1 = t1 % t2 *10;
cout<<t1/t2;
count++;
}
cout<<endl;
}
}
return 0;
}