1. 程式人生 > >float 浮點數的無效值和無限大和無限小

float 浮點數的無效值和無限大和無限小

今天看到原始碼中有 

void Unit::SetPosition(float x, float y) 

ASSERT(x == x);
ASSERT(y == y);

。。。。。

這樣的判斷  以前只知道兩個浮點數不能用==判斷 不明白一個浮點數為什麼要做相等判斷

百度科普了下

浮點數計算的時候可能產生-1.#IND000  無限小 例( acos(1.0001f)) 或者無限大 1.#IND000   或者無效值 1.#INF000 例(10 / 0)

當浮點數等於 -1.#IND000  或 1.#IND000 可以用

ASSERT(x == x); 判斷是否是個無效的數

但是 1.#INF000  確不能判斷


#define InvalidDouble *(double*)("\xff\xff\xff\xff\xff\xff\xef\x7f")

圖中 b的判斷進不去  實在困惑 

 _isnan(b);  也無法判斷  

列印b已經是 1.#INF000 

求廣大高手解惑

相關推薦

float 點數無效無限大無限小

今天看到原始碼中有  void Unit::SetPosition(float x, float y)  { ASSERT(x == x);ASSERT(y == y); 。。。。。 這樣的判斷  以

Float點數轉二進制串十六進制串

ilb cal == oca shift res tof 1.2 per #include <String.au3>#include <Array.au3>#cs 0.125 0000003e 12.25 00004441 -0.125 0000

兩種方法對點數求根號(二分法牛頓法)

二分法和牛頓法求根號是面試中的經典題,如果沒提前接觸過,經典題將成為經典難題。我先上程式碼,後面再對程式碼進行解釋: #include<iostream> #include<string> #define PRECISION 0.0002 using

對整數點數儲存,little-endianbig-endian位元組順序,以及位運算的一點回顧

對問題的一些理解 1.位運算及其相關運算 位運算 &,|,^,~,<<,>>,+,! 用 異或^ 可以交換兩個變數,不需要中間變數 a = a ^ b;   // a = 0000 1111 b = b ^ a;   // b = 0000

點數轉字串函式fcvtgcvt

fcvt,函式名,把一個浮點數轉換為字串。 用 法: char *fcvt(double value, int ndigit, int *decpt, int *sign); 引數: value:要轉換的浮點數,輸入引數 ndigit:取小數的位數,輸入引數 decpt:表示小數點的位置,輸出引

float點數的四舍五入

4.5 align 轉換成整型 auth 是你 int upload 保險 ews 瑞生網http://www.rationmcu.com版權所有 前幾天,有個小夥伴在做實驗過程中,發現了一個奇怪的現象,這個現象就是… 他在用printf輸出浮點

Python中將科學計數法(或以e為底的自然對數)字串轉換為float點數

沒時間完整寫,直接上程式碼吧# !usr/bin env python # -*- coding: utf-8 -*- import re import math def ConvertELogStrToValue(eLogStr): """ conv

shell 如何進行 float 點數運算

shell 有時牽涉到浮點數的運算 有以下這種方法: gawk -v x=$aa -v y=$bb 'BEGIN{printf "%.1f\n",x+y}' 其中,+ 號也可以是  - (減)

Float點數與零比較的處理方法

轉載:http://blog.sina.com.cn/s/blog_5fdcf5c901013vfd.html 在使用MSSQL資料庫的時候,當某個欄位被定義成 float 浮點數型別時,我們需要特殊處理。一個float浮點數是不能直接和零比較的,int可以直接和0比較

float(點數或實數)與Hexadecimal(十六進位制)之間的轉換

先看一下IEEE關於浮點數的定義: IEEE 754規定了四種表示浮點數值的方式:單精確度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實做)。只有32位元模式有強制要求,其他都是選擇性的。 32位單精

對於點數doublefloat資料DecimalFormat保留小數並且格式化並設定千分位數操作

//示例一:最多保留兩位小數 System.out.println("--------###,###.##---------------"); System.out.println(new DecimalFormat("###,###.##").format(1231111.

Java點數float,bigdecimaldouble精確計算的精度誤差問題

1.double小數轉bigdecimal後四捨五入計算有誤差 案例: double g= 12.35; BigDecimal bigG=new BigDecimal(g).setScale(1, BigDecimal.ROUND_HALF_UP); //期望

Java點數double/floatbigdecimal的精度之別

      咋眼一看,好像有幾個名詞。       浮點數,相對定點數而言。定點數,約定機器中所有資料的小數點位置是固定不變的。由此可見,定點數的形式不靈活,固定的小數點位置決定了固定位數的整數部分和小數部分,不利於表達特別大或特別小的數。浮點數由此在計算機中更多地應用,可

shell比較點數整數

ssi 工作 示例 一個 style 朋友 shell code nbsp   今天有一個朋友忽然問我在shell中,如何比較浮點數和整數,倒是把我問的一楞,在工作中確實沒有遇到這個場景。我們也知道,在shell中數字的計算通常都會轉換成整數,比如說1.1和1會被認為是一樣

11、定點數點數

1.0 完全 偏移量 壓縮 浪費 平方根 整數加法 內部 二進制表示 我們平時都會用到小數,通常我們可以把小數表示成10的冪的形式,如12.21=1x101+2x100+2x10-1+1x10-2。但是有一些很難表示,如1/3. 小數用二進制表示的最簡單的方法是BCD碼,這

利用mapreduce編寫一個str2float函數,把字符串'123.456'轉換成點數123.456:

AR 浮點數 n) 失敗 FN cto fun [1] str2 利用map和reduce編寫一個str2float函數,把字符串‘123.456‘轉換成浮點數123.456: # -*- coding: utf-8 -*- from functools import r

輸入一個點數,分別返回該數的整數部分小數部分_指針實現

split AI OS 部分 sin ati ostream col using   輸入一個浮點數,分別返回該數的整數部分和小數部分   由於同時返回整數部分和小數部分,return 語句只能返回一個值,可以采用指針實現雙向傳遞 C++代碼如下: 1 #include

MySQL點數點數

val 1.2 create tab 最好 因此 如果 包括 操作 MySQL 分為兩種方式:浮點數和定點數。浮點數包括 float(單精度)和 double(雙精度),而定點數則只有 decimal 一種表示。定點數在 MySQL 內部以字符串形式存放,比浮點數更精確,適

整數點數加法

浮點數 bsp class col ++ diff turn clas -i //本來想著將浮點數分成兩部分,然後進行整數加法,唉 還是算了,太麻煩了,下面這樣寫就是冗余了很多。string floatAdd(string &s1, string &s2)

正確生成點型的方法,解決sqlachemy Float點型的坑,生成float類型時,長度精度均為0,導致查詢不到結果!

依然 tab 圖片 control 選擇 分享 ice mod ble 問題描述 在使用flask_sqlachemy時,給price字段選擇了Float類型,數據庫用的mysql,生成數據庫表後,發現 from sqlalchemy import Float