1. 程式人生 > >演算法訓練 sign函式 浮點數精度

演算法訓練 sign函式 浮點數精度

/*
* @author :
* @version : 2018/3/20 22:19.
* 說明:
*/

import java.util.Scanner;

/**
*

 
*
* 演算法訓練 sign函式
時間限制:1.0s 記憶體限制:256.0MB

問題描述
  給定實數x,輸出sign(x)的值。

  sign(x)是符號函式,如果x>0,則返回1;如果x=0,則返回0;如果x<0,則返回-1。
輸入格式
  一行一個實數x。
輸出格式
  一行一個整數表示答案。
樣例輸入
-0.0001
樣例輸出
-1
資料規模和約定
  |x|<=10000,輸入資料精度最多達到4位小數。
提示
  判斷實數x是否等於零時,由於計算機實數運算誤差,應當引入極小量eps,核心程式碼如下:
  其中fabs為cmath中的絕對值函式。
  const double eps=1e-6;

  if (fabs(x -x) <= eps) {
  //x是零
  }
*
*
*/

其實如果按照題中的提示,不應該用else語句塊定義等於零的情況.
而應該: if (Math.abs(x) <= 0.000001) {
  //x是零
  }

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double x = sc.nextFloat();

        System.out.println(sign(x));
    }

    private
static int sign(double x) { if (x > 0) { return 1; } else if (x < 0) { return -1; } else { return 0; } } }