在MT4中通过NormalizeDouble对数字进行四舍五入 - 页 17 1...1011121314151617 新评论 Sergei Vladimirov 2016.09.28 10:36 #161 pavlick_:我写了一点训练代码(我自己也有兴趣去探究),它把浮动数的内幕翻了出来。f处的输出==0.5+1/(2^24)。1/(2^24)是给定度数的尾数中最年轻的数字。你到底想在那里看到什么?浮点数每个符号有1位,每个指数有8位,剩下的23位是尾数,也就是说,最大精度是二进制表示的23位小数,或者7位小数。对于双数,每个符号有1位,每个指数有11位,剩下的52位是尾数,最大精度是二进制表示的52位小数或16位小数。为什么会有这样的代码? pavlick_ 2016.09.28 11:30 #162 Sergei Vladimirov:你到底想在那里看到什么?浮点数每个符号有1位,每个指数有8位,剩下的23位是尾数,即二进制表示法中小数点后23位的最大精度,即小数点后7位。对于双数,每个符号有1位,每个指数有11位,剩下的52位是尾数,最大精度是二进制表示的52位小数或16位小数。为什么会有这样的代码?"没有实践的理论是死的,没有结果的,没有理论的实践是无用的,有害的。"而各种有趣的浮动数字的东西比比皆是。float a, b, f; a=123456789; b=123456788; f=a-b; cout << f; // cout: 8 Sergei Vladimirov 2016.09.28 12:15 #163 pavlick_:"没有实践的理论是死的,没有结果的,没有理论的实践是无用的,有害的。"还有各种有趣的浮动数字的东西。我只是想,也许你在期待着MKL的独特之处。而整个尾数溢出的事情也很有趣。适用于一年级。)void OnStart() { float f1 = (float)1.1; float f2 = (float)2.2; float f3 = (float)3.3; if((f1 * f2) * f3 == f1 * (f2 * f3)) Print("Выражения равны."); else Print("Нифига не равны!"); } pavlick_ 2016.09.28 12:41 #164 对于一年级。)当然,告诉我们吧,大多数程序员对这个问题都不了解,我自己也有一些差距。 Sergei Vladimirov 2016.09.28 12:48 #165 pavlick_: 当然,告诉我,大多数程序员在这个问题上都不太行得通,我自己也有一些差距。 好吧,我不知道,我们接受了二进制算术的训练,所以它在我们的头脑中停留了一辈子。)另一件事是,不是所有的人都是程序员。总的来说,你不要认为我的问题是你花园里的某种石头,我只是认为你的方案的目的--看到MCL与标准的一些差异,所以我问了。 pavlick_ 2016.09.29 00:17 #166 int main(){ // МКЛ аналог numeric_limits<float>::epsilon() - FLT_EPSILON float a = (float)10 + numeric_limits<float>::epsilon(); float b = (float)1 + numeric_limits<float>::epsilon(); float c = (float)0.5 + numeric_limits<float>::epsilon(); print_float(a); print_float(b); print_float(c); } ----a-------------- value = 10 mantissa 24: 1,01000000000000000000000 exponenta - 127 = 3 мантиса без прибавки эпсилон: 1,01000000000000000000000 ----b-------------- value = 1.0000001192092896 mantissa 24: 1,00000000000000000000001 exponenta - 127 = 0 мантиса без прибавки эпсилон: 1,00000000000000000000000 ----c-------------- value = 0.50000011920928955 mantissa 24: 1,00000000000000000000010 exponenta - 127 = -1 мантиса без прибавки эпсилон: 1,00000000000000000000000 1...1011121314151617 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我写了一点训练代码(我自己也有兴趣去探究),它把浮动数的内幕翻了出来。
f处的输出==0.5+1/(2^24)。1/(2^24)是给定度数的尾数中最年轻的数字。
你到底想在那里看到什么?浮点数每个符号有1位,每个指数有8位,剩下的23位是尾数,也就是说,最大精度是二进制表示的23位小数,或者7位小数。对于双数,每个符号有1位,每个指数有11位,剩下的52位是尾数,最大精度是二进制表示的52位小数或16位小数。为什么会有这样的代码?
你到底想在那里看到什么?浮点数每个符号有1位,每个指数有8位,剩下的23位是尾数,即二进制表示法中小数点后23位的最大精度,即小数点后7位。对于双数,每个符号有1位,每个指数有11位,剩下的52位是尾数,最大精度是二进制表示的52位小数或16位小数。为什么会有这样的代码?
"没有实践的理论是死的,没有结果的,没有理论的实践是无用的,有害的。"还有各种有趣的浮动数字的东西。
我只是想,也许你在期待着MKL的独特之处。
而整个尾数溢出的事情也很有趣。适用于一年级。)
当然,告诉我,大多数程序员在这个问题上都不太行得通,我自己也有一些差距。