1. 程式人生 > >程式設計中無窮大的設定 很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相

程式設計中無窮大的設定 很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相

很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1

但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相加會變成負數,還有如在做dijkstra求最短路時,當做鬆弛操作,判斷if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v]時,若u到v沒有路勁,w[u][v]=0x7fffffff,這樣d[u]+w[u][v]會變成負數,這就產生了錯誤。

為了儘量避免以上的錯誤,我們可以改變無窮大的設定,可以將0x3f3f3f3f設為無窮大,0x3f3f3f3f的10進製表示為1061109567,這個數已達到10^9,足以表示無窮大,又0x3f3f3f3f+0x3f3f3f3f=2122219134,滿足無窮大+無窮大仍為無窮大

當把無窮大設為0x3f3f3f3f時,在做初始化時也很方便,比如在初始化陣列a時,可以使用

Memset(a,0x3f,sizeof(a)),因為0x3f3f3f3f的每個位元組都是0x3f,如果使用0x7fffffff,需要迴圈賦值,耗費更多時間

下面做個簡單的小測試

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define MAX1 0x7fffffff
  4. #define MAX2 0x3f3f3f3f
  5. int a[3];  
  6. int main()  
  7. {  
  8.     memset(a,0x3f,sizeof(a));  
  9.     printf("%d\n"
    ,MAX1);  
  10.     printf("%d\n",MAX1*2);  
  11.     printf("%d\n",MAX2);  
  12.     printf("%d\n",MAX2*2);  
  13.     for(int i=0;i<3;i++)  
  14.     printf("%d ",a[i]);  
  15.     printf("\n");  
  16.     return 0;  
  17. }  


相關推薦

程式設計無窮大設定 很多可能0x7fffffff,個數的確是32-bit int符號0其他1 很多情況0x7fffffff出現錯誤比如溢位這樣無窮大數

很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相加會變成負數,還有如在做dijkstra求最短路時,當做鬆弛操作,判斷if (d[u]+w

Navicat for MySQL工具中大小寫敏感的情況表名稱出現變小寫

           不知道大家有沒有用Navicat for Mysql 工具操作資料庫,我感覺蠻好用的,但是不知道你們有沒有發現,往指定的庫中匯入sql檔案時,表名竟然不區分大小寫了,真鬱悶!  

在Navicat for MySQL工具中大小寫敏感的情況表名稱出現變小寫的情況,如何改回大寫呢

  (1)        問題描述                 1﹚ 在Navicat for mysql 修改過表名之後表在後續的跟進中會把表名在未知情況下變成小寫的.                    2﹚ 在大小寫敏感情況下,對欄位中該大寫的字母修改之後發現說

異常的數字拋出什麽出現錯誤?(未解決)

為什麽 class a light divide true vid main catch blog #include <iostream> using namespace std; class A { public: A(int a, int b) {

ensp出現錯誤代碼43其他備均能使用

網絡運維基礎知識一開始問題如圖,在華為論壇,百度等尋找答案,然而接下來就是一連串的問題。其實這一系列的問題都是華為eNSP模擬器跟自帶的最新版Oracle VM VirtualBox不兼容的問題。其實不然,最簡單解決方法,直接更換其他版本。如:版本的eNSP_V100R002C00B380_Setup以及自帶

Android 錯誤 :TextView屬性ellipsize的 start、middle可能出現錯誤

錯誤摘要如下: Java.lang.ArrayIndexOutOfBoundsException: length=*; index=-1 at android.text.StaticLayout.c

[已解決]IE按F12工作列出現“開發人員工具”按鈕視窗不顯示

原創內容: 說實話這個問題是我去年碰到了,怎麼都搜不到解決方案,當時有個網友說是被移動到螢幕以外去了,但沒說怎麼解決,網上常見的解決辦法(N多複製貼上的,真無聊)有: ctrl+p會把這個弄到瀏覽器裡面,不好用 右擊工作列按鈕把他最大化,但是想用指標選取瀏覽器中的元素時不方便 &nb

在Eclipse新增struts.xml為什麼出現錯誤

No1:你struts2的jar包匯入齊全沒有 ,在倉庫裡面找/在libraries找 No2:好像是struts2上面的配置有問題,應該是 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts P

0x3f3f3f3f...程式設計無窮大常量的設定技巧

如果問題中各資料的範圍明確,那麼無窮大的設定不是問題,在不明確的情況下,很多程式設計師都取0x7fffffff作為無窮大,因為這是32-bit int的最大值。如果這個無窮大隻用於一般的比較(比如求最小值時min變數的初值),那麼0x7fffffff確實是一個完美的選擇,

求一個數重複元素出現的元素及出現次數次數同時優先考慮次數

#include <iostream> #include <string> #include <map> using namespace std; void maxNumTimes(int a[], int len, int b[])

出現錯誤 連線MySQL資料庫出現問題:Access denied for user 'root'@'localhost' (using password:YES)

連線MySQL資料庫,出現問題:Access denied for user 'root'@'localhost' (using password:YES)。         經查詢資料發現是ro

makefile出現錯誤卻不停止卻繼續執行

原文地址:http://www.crifan.com/makefile_not_stop_on_error/ 【問題】 寫了個makefile: #goto every sub foler(single book)'s src dir to do 'make xxx'

從輸入的獲取輸入0後結束(利用do_while boolean isRight來標識用戶輸入)

bool out 用戶 system efault 最大 pub string void mport java.util.Scanner; public class DoWhile2 {public static void main(String[] args) { int

從一組集合獲取分多次取集合的每段數據重組成一個新的集合。

clas pub 處理 oat private color andro sublist roi 一個項目中偶遇的簡單算法,個人覺得還不錯,雖不常用,也記錄在此吧。 1 package huolongluo.qihuo.util; 2 3 import androi

GA:利用GA對一元函數進行優化過程求x∈(0,10)y的——Jason niu

title variable ati 過程 優化 mea ... http [] x = 0:0.01:10; y = x + 10*sin(5*x)+7*cos(4*x); figure plot(x, y) xlabel(‘independent variable

Excel_ vlookup篩選並賦新百分位數

字符串 問題解決 否則 連續 搜索 excel ntile 最大 賦值 vlookup: 用於匹配一列數據中於另一列數據中是否有同樣的字符串,並可以將另一列數據中相同字符串的後一列變量的數值填入當前列。 =VLOOKUP(A2,AG:AH,2,0) 在AG:AH中篩選A2,

Jsの數組練習-求一組數以及所在位置

span http ima scrip ice viewport 代碼實現 pre val 要求:求一組數中的最大值和最小值,以及所在位置 代碼實現: <!DOCTYPE html> <html lang="en"> <head>

Java 數組 定義一個數獲取數組奇數個數和偶數個數

++ java 偶數 system += 最小值 dem [] style /** * 定義一個數組,獲取數組中的最大值和最小值 奇數個數和偶數個數 * */ package com.xuyigang1234.chp01; public class Demo8 {

求任意一個區間 - 單調棧

連結:https://ac.nowcoder.com/acm/contest/223/C來源:牛客網 題目描述 給出長度為n的序列a,其中第i個元素為 ,定義區間(l,r)的價值為 請你計算出

用 prompt 輸入字串建立陣列找出陣列問題闡述與解決。

用 prompt 輸入字串建立陣列。用三種方法找出陣列中最大值。問題闡述與解決。 實現目標:輸入一組數,並找出這組數中最大的值。 採用的方法: 雙 for迴圈,列出從小到大(從大到小)順序。 單 for 迴圈,一遍迴圈找出最大值。 使用 Math.max。