2010-05-08 14 views
2

您好,我有一個關於c程序員的問題,我們在學校有一個測試,以在我們的老師製作的操作系統中創建一個軟實時系統。在沒有任何圖書館的情況下將c分割爲兩張

好吧,這一切都很好,我們選擇創建一個系統,根據他或她的血糖計算糖尿病患者需要多少單位的藥物。它並不需要是正確的只是我們有一個實時系統的想法:d

但是,我們已經打了一個小障礙我們的計算公式藥品的單位是

[blood sugar] * 1.2 

但唯一我們可以在進程之間發送消息的方式是通過一個包含8個long的結構,但這裏是我對c的瞭解結束的地方,我們需要以某種方式將這個double分解成2個long,例如:整數0和小數長1,然後在另一邊組裝。但我不知道該做什麼,因此需要一點幫助。

我們已經試過,但我們沒有獲得C標準庫

+0

該系統的雙倍長度是多少? – evilpie 2010-05-08 20:54:44

回答

2

如果你不需要特別的精度高,只需使用比例整數:由十部分功率倍增雙,將其轉換爲整數(刪除剩餘的十進制數字),併發送長整型。另一方面,你可以撤消這些步驟。

如果您需要更高的精度,您可以使用modf將數字拆分爲整數部分和小數部分,然後縮放小數部分。

+0

這也可以工作,但我有一些問題類型鑄造它作爲一個長期。 是電流? long temp =(long)(mydouble * 1000.0); – Androme 2010-05-08 21:13:22

+0

@DoomStone:是的,這是正確的。 – 2010-05-08 21:16:23

+0

偉大的工作:D非常感謝 – Androme 2010-05-08 21:24:47

2

骯髒的伎倆,存儲您在多頭雙重的實際表現(前提是它們的大小匹配):

double yourVar = yourValue; 
long * read = (long *)&yourVar; 
yourStruct.long1 = *read; 
yourStruct.long2 = *(read + 1); 

,並就對方重新組合:

double yourVar; 
long * read = (long *)&yourVar; 
*read = yourStruct.long1; 
*(read + 1) = yourStruct.long2; 

基本上你是作弊;你得到一個指向你的變量的指針,它是一個double,但你告訴編譯器它實際上是一個指向兩個連續的long變量的指針。然後,你可以讀寫它們,但實際發生的事情是,你正在移動基礎位表示,換句話說,兩個變量long對你的數字沒有意義(它們不是整數部分或小數部分例如)。

當然,這僅僅在進行:

sizeof(long) * 2 >= sizeof(double) 

你的平臺上,並提供了通信協議不以任何方式改變的變量按位表示。

+0

別管我無用的評論。 – Puppy 2010-05-08 21:00:23

+0

嗯,我不是很確定你在這裏做什麼,但是我怎麼會把它重新調整到另一邊的雙倍呢? – Androme 2010-05-08 21:07:22

+0

我編輯了我的答案來解決你的問題 – UncleZeiv 2010-05-09 11:14:01

相關問題