5
A
回答
8
是。 IEEE754浮點(這是C#必須使用)保證本:
轉換一個
float
到double
保留完全相同相同的值轉換是
double
回float
恢復正是那原來的float
。
該組double
s是float
秒的超集。
注意這也適用於NaN
,+Infinity
和-Infinity
這一點。零的符號性也被保留。
6
讓我們來測試這與代碼:
[Fact]
public void IsFloatRoundTrippableToDouble()
{
var bits = default(FloatUnion);
bits.FloatData = float.MinValue;
var testBits = default(FloatUnion);
// ReSharper disable once LoopVariableIsNeverChangedInsideLoop
while (bits.FloatData <= float.MaxValue)
{
var d = (double)bits.FloatData;
testBits.FloatData = (float)d;
if (bits.IntData != testBits.IntData)
Assert.True(false);
bits.IntData -= 1;
}
}
[StructLayout(LayoutKind.Explicit)]
private struct FloatUnion
{
[FieldOffset(0)] public uint IntData;
[FieldOffset(0)] public float FloatData;
}
這段代碼測試MinValue
和MaxValue
之間的每個float
值(除NaN
,無窮大,等...)。內存中的字節表示將進行比較以確保不會發生其他轉換。
雖然這似乎瘋狂測試約4個十億可能的浮點數,它實際上在我的機器上大約11秒運行一次。
是的,轉換是安全的。從float轉換爲double,然後再轉回不會丟失任何信息。
相關問題
- 1. 讀浮點值,而不會失去包含浮點數字值,如精度
- 2. 是否json.dumps保證不會失去浮點精度?
- 3. 失去精度,同時打印浮動
- 4. 雙精度和單精度浮點數?
- 5. 是否有可能以保真度將浮點雙精度浮點雙精度到兩個十進制整數?
- 6. 投失去精度
- 7. 爪哇 - 雙精度浮點
- 8. 浮法arithemtic和雙精度?
- 9. 將浮點數保存爲整數而不會丟失浮點精度
- 10. 雙精度丟失
- 11. 雙精度丟失
- 12. C:通過printf()打印時,雙精度可以多長時間()
- 13. 可能會丟失精度
- 14. 可能會損失精度?
- 15. 雙精度浮點數和其他浮點數精度
- 16. 雙精度浮點值傳遞雙精度時
- 17. 雙精度浮標的雙精度數字
- 18. 是否可以打印一個雙精度浮點數
- 19. C#精度損失除以雙
- 20. 將long或BigInteger乘以double而不會損失精度
- 21. 浮標精度損失
- 22. redis zrank:浮點數可能會丟失精度
- 23. JDBC ResultSet getDate失去精度
- 24. 大數目,失去精度
- 25. 兩次調用1/val時可能會失去精度嗎?
- 26. Java:使用`Math.sin()時可能會失去精度`
- 27. 當從雙精度轉換爲浮點時檢測精度損失
- 28. 添加雙精度丟失
- 29. 雙精度丟失C++
- 30. 雙精度丟失C#
我很困惑,爲什麼你張貼了這個,豈不是在文檔更合適? –
我不同意。這仍然是一個很好的問題和答案。回答你自己的問題並沒有什麼壞處。 – Bathsheba