这一行:
NSLog(@"DBL_MAX: %f", DBL_MAX);
打印这个非常大的值: 17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895351438246423432132688946418276846754670353751698604991057655128207624549009038932894407586850845513394230458323690322294816580855933212334827479
但是,当我测试这样的双值时:
double test = 9999999999999999.0;
NSLog(@"test: %f", test);
我得到了这个意想不到的结果:
测试:10000000000000000.000000
这似乎是产生预期结果的最大位数:
double test = 999999999999999.0;
NSLog(@"test: %f", test);
测试:999999999999999.000000
我如何使用更高的阳性分数?
感谢。
答案 0 :(得分:2)
不幸的是,我不能直接回答这个问题,因为我不明白你的意思是“我如何处理更高的正分数?”。
但是,我可以了解浮点数是什么,不是什么。
浮点数包括:
这些通常使用聪明的编码组合成32,64,80或128位。此外,一些特殊编码用于表示+ -infinity,非数字(NaN)和+ -Zero。
由于尾数的位数有限,因此您的值只能包含此有效位数。一个非常小的浮点数可以表示10 ^ -308和大10 ^ 308中的值。但是,任何数字只能有大约16个十进制数字。
换句话说,如果DBL_MAX与存储在变量中的信息量不对应,则打印输出。例如,没有办法表示相同的数字,但最后只有... 7480而不是...... 7479。
回到这个问题,为了说明如何表示你的价值观,你必须描述你想要代表什么样的价值观。它们是否真的是分数(即一个整数除以另一个整数),在这种情况下,您可能希望使用两个整数来表示它。如果要表示非常大的值,可能需要使用http://gmplib.org
之类的包答案 1 :(得分:-2)
C#中的浮点不会始终产生准确的结果。有些数字不能用double,float或小数表示。您可以使用“十进制”而不是“双倍”来提高准确性,但仍不能确保所有数字都能准确表示。