zoukankan      html  css  js  c++  java
  • Uva

    Floating-point numbers are represented differently in computers than integers. That is why a 32-bit
    floating-point number can represent values in the magnitude of 1038  while a 32-bit integer can 
    only represent values as high as 232.
    Although there are variations in the ways floating-point numbers are stored in Computers, in this 
    problem we will assume that floating-point numbers are stored in the following way:
    Floating-point numbers have two parts mantissa and exponent. M -bits are allotted for mantissa and 
    E bits are allotted for exponent. There is also one bit that denotes the sign of number (If this 
    bit is 0 then the number is positive and if it is 1 then the number is negative) and another bit 
    that denotes the sign of exponent (If this bit is 0 then exponent is positive otherwise negative). 
    The value of mantissa and exponent together make the value of the floating-point number. If the 
    value of mantissa is m then it maintains the constraints 1 ≤ m < 1. The left most digit of mantissa 
    must always be 1 to maintain the constraint 1 ≤ m < 1. So this bit is not stored as it is always 1. 
    So the bits in mantissa actually denote the digits at the right side of decimal point of a binary 
    number (Excluding the digit just to the right of decimal point)
    In the figure above we can see a floating-point number where M = 8 and E = 6. The largest value 
    this floating-point number can represent is (in binary) 0.1111111112 × 21111112 . The decimal 
    equivalent to this number is: 0.998046875 × 263 = 920535763834529382410. Given the maximum possible 
    value represented by a certain floating point type, you will have to find how many bits are 
    allotted for mantissa (M ) and how many bits are allotted for exponent (E) in that certain type.
    Input
    The input file contains around 300 line of input. Each line contains a floating-point number F that 
    denotes the maximum value that can be represented by a certain floating-point type. The floating 
    point number is expressed in decimal exponent format. So a number AeB actually denotes the value A 
    × 10B . A line containing ‘0e0’ terminates input. The value of A will satisfy the constraint 0 < A 
    < 10 and will have exactly 15 digits after the decimal point.
    Output
    For each line of input produce one line of output. This line contains the value of M and E. You can 
    assume that each of the inputs (except the last one) has a possible and unique solution. You can 
    also assume that inputs will be such that the value of M and E will follow the constraints: 9 ≥ M ≥ 
    0 and 30 ≥ E ≥ 1. Also there is no need to assume that (M + E + 2) will be a multiple of 8.
    Sample Input
    5.699141892149156e76
    9.205357638345294e18
    0e0


    Sample Output
    5 8
    8 6

    基本是一道纯碎的数学题目

    AC代码:

    #include <iostream>  
    #include <sstream>  
    #include <string>  
    #include <cmath>  
    
    using namespace std;
    
    int main() {
    	double M[20][40];
    	long long E[20][40];
    
    	// 打表  
    	for (int i = 0; i <= 9; ++i) for (int j = 1; j <= 30; ++j) {
    		double m = 1 - pow(2, -1 - i), e = pow(2, j) - 1;
    		double t = log10(m) + e * log10(2);
    		E[i][j] = t, M[i][j] = pow(10, t - E[i][j]);
    	}
    
    	// 输入并输出结果  
    	string in;
    	while (cin >> in && in != "0e0") {
    		// 处理输入  
    		for (string::iterator i = in.begin(); i != in.end(); ++i) if (*i == 'e') *i = ' ';
    		istringstream ss(in);
    		double A; int B;
    		ss >> A >> B;
    		while (A < 1) A *= 10, B -= 1;
    		// 在打好的表中寻找答案  
    		for (int i = 0; i <= 9; ++i) for (int j = 1; j <= 30; ++j) {
    			if (B == E[i][j] && (fabs(A - M[i][j]) < 1e-4 || fabs(A / 10 - M[i][j]) < 1e-4)) {
    				cout << i << ' ' << j << endl;
    				break;
    			}
    		}
    	}
    }




  • 相关阅读:
    OpenCV 入门示例之三:AVI 视频播放控制
    CSS3 图标神器 => content:"我是特殊符号"
    【angular5项目积累总结】优秀组件以及应用实例
    基于angular2+ 的 http服务封装
    【angular5项目积累总结】遇到的一些问题以及解决办法
    【angular5项目积累总结】panel组件
    【angular5项目积累总结】http请求服务封装
    【angular5项目积累总结】消息订阅服务
    【angular5项目积累总结】表单复杂校验
    【angular5项目积累总结】列表多选样式框(2)
  • 原文地址:https://www.cnblogs.com/zhangyaoqi/p/4591617.html
Copyright © 2011-2022 走看看