Lab 3-2: 科學記號比大小 (30%)

  • 輸入:兩個以 10 為底的實數。
    • 實數的正負號 (sign),正負號輸入大於等於 0 為正數,小於 0 為負數。
    • 實數的尾數 (mantissa),尾數部分固定 9 位數字,第一位不為 0,數值為輸入數字乘以\( \frac{1}{100,000,000} \),。
    • 實數的指數部分 (exponent),指數部分為 -126 至 +127。
  • 輸出:
    • 兩實數的科學記號表示,有效位數 (Significant figures - Wikipedia) 顯示固定為 9 位。
    • 兩實數比較結果,如果第一數較大則輸出 1,相同則輸出 0,第一數較小則輸出 -1
  • 檔名:lab3_2_<學號>.cpp (e.g. lab3_2_106062802.cpp)

程式需提示使用者輸入兩個實數的正負號 (sign)、實數的尾數 (mantissa,輸入數字乘以\( \frac{1}{100,000,000} \))、實數的指數部分 (exponent),程式需輸出數字顯示比較結果。

Format

Input real number (a), sign: <sign a>⏎
Input real number (a), mantissa: <mantissa a>⏎
Input real number (a), exponent: <exponent a>⏎
Input real number (b), sign: <sign b>⏎
Input real number (b), mantissa: <mantissa b>⏎
Input real number (b), exponent: <exponent b>⏎
The real number (a) is: <output real number a>
The real number (b) is: <output real number b>
Compare result: <1, 0, or -1>

Example

$ ./a.out
Input real number (a), sign: -100⏎
Input real number (a), mantissa: 123456789⏎
Input real number (a), exponent: 10⏎
Input real number (b), sign: -10⏎
Input real number (b), mantissa: 123456788⏎
Input real number (b), exponent: 10⏎
The real number (a) is: -1.23456789e+10
The real number (b) is: -1.23456788e+10
Compare result: -1

Reference Code:

Credit: 黃芷葳 (110021115)

#include <iostream>
#include <iomanip>
#include <cmath>

int main(void)
{
    int sa = 0, expa = 0, sb = 0, expb = 0;
    double signa = 0, mana = 0, signb = 0, manb = 0;
    double a = 0, b = 0;

    std::cout << "Input real number (a), sign: ";
    std::cin >> sa;
    if (sa >= 0)
    {
        signa = 1;
    }
    else //sa<0
    {
        signa = -1;
    }

    std::cout << "Input real number (a), mantissa: ";
    std::cin >> mana;
    std::cout << "Input real number (a), exponent: ";
    std::cin >> expa;

    std::cout << "Input real number (b), sign: ";
    std::cin >> sb;
    if (sb >= 0)
    {
        signb = 1;
    }
    else //sb<0
    {
        signb = -1;
    }
    std::cout << "Input real number (b), mantissa: ";
    std::cin >> manb;
    std::cout << "Input real number (b), exponent: ";
    std::cin >> expb;

    a = signa * (mana * (std::pow(10, expa - 8)));
    b = signb * (manb * (std::pow(10, expb - 8)));

    std::cout << "The real number (a) is: "
              << std::scientific << std::setprecision(8)
              << a << "\n";
    std::cout << "The real number (b) is: "
              << std::scientific << std::setprecision(8)
              << b << "\n";

    if (a > b)
    {
        std::cout << "Compare result: 1"
                  << "\n";
    }
    else if (a == b)
    {
        std::cout << "Compare result: 0"
                  << "\n";
    }
    else //a<b
    {
        std::cout << "Compare result: -1"
                  << "\n";
    }

    return 0;
}