# 关于浮点的一些问题 [英] Some questions about floating points

### 问题描述

I'm wondering if a number is represented one way in a floating point representation, is it going to be represented in the same way in a representation that has a larger size. That is, if a number has a particular representation as a `float`, will it have the same representation if that `float` is cast to a `double` and then still the same when cast to a `long double`.

``` I'm wondering because I'm writing a BigInteger implementation and any floating point number that is passed in I am sending to a function that accepts a long double to convert it. Which leads me to my next question. Obviously floating points do not always have exact representations, so in my BigInteger class what should I be attempting to represent when given a float. Is it reasonable to try and represent the same number as given by std::cout << std::fixed << someFloat; even if that is not the same as the number passed in. Is that the most accurate representation I will be able to get? If so, ... 什么是提取该值的最好方法（在10的基础上），目前我只是把它作为一个字符串并将其传递给我的字符串构造函数。这将工作，但我不得不感到这是一个更好的方法，但肯定采取余数除以我的基地是不准确的浮点数。 What's the best way to extract that value (in base some power of 10), at the moment I'm just grabbing it as a string and passing it to my string constructor. This will work, but I can't help but feel theres a better way, but certainly taking the remainder when dividing by my base is not accurate with floats. 最后，我不知道是否有一个相当于 uintmax_t 的浮点数，这是一个类型名称，它将永远是系统上最大的浮点类型，或者没有点因为 long double 将始终是最大的（即使它与double相同）。 Finally, I wonder if there is a floating point equivalent of uintmax_t, that is a typename that will always be the largest floating point type on a system, or is there no point because long double will always be the largest (even if it 's the same as a double). 推荐答案 如果通过相同的表示法表示内存中除填充之外的完全相同的二进制表示双精度具有指数和尾数的更多位，并且还具有不同的指数偏差。但我相信任何单精度值都可以在双精度（除非可能反正规化的值）中可以表示。 If by "same representation" you mean "exactly the same binary representation in memory except for padding", then no. Double-precision has more bits of both exponent and mantissa, and also has a different exponent bias. But I believe that any single-precision value is exactly representable in double-precision (except possibly denormalised values). 我不确定你的意思，当你说浮点不总是具有确切的表示。当然，不是所有的十进制浮点值都有精确的二进制浮点值（反之亦然），但我不确定这是一个问题。只要你的浮点输入没有小数部分，那么一个适当大的BigInteger格式应该能够精确地表示它。 I'm not sure what you mean when you say "floating points do not always have exact representations". Certainly, not all decimal floating-point values have exact binary floating-point values (and vice versa), but I'm not sure that's a problem here. So long as your floating-point input has no fractional part, then a suitably large "BigInteger" format should be able to represent it exactly. 通过base-10表示不是去的方式。理论上，您需要的是一个长度为1024的位数组，将其初始化为零，然后将尾数位移入指数值。但是如果不了解更多关于您的实现，我还没有更多的建议！ Conversion via a base-10 representation is not the way to go. In theory, all you need is a bit-array of length ~1024, initialise it all to zero, and then shift the mantissa bits in by the exponent value. But without knowing more about your implementation, there's not a lot more I can suggest! 这篇关于关于浮点的一些问题的文章就介绍到这了，希望我们推荐的答案对大家有所帮助，也希望大家多多支持IT屋！ ```
``` 查看全文 ```
``` ```
``` ```
``` (adsbygoogle = window.adsbygoogle || []).push({}); 相关文章 关于JavaScriptSerializer一些问题; 关于编程的一些问题; 关于C ++的一些问题; 关于C的一些问题; 关于向量的一些问题; 关于分页的一些问题; 关于理解的一些问题; 关于PHPExcel图表的一些问题; 关于"ArcGIS"开发的一些问题.; 关于解码/编码的一些问题; 关于java OOP的一些问题; 一些问题; 一些问题......; 一些问题。 。 。 。; 一些问题; 一些问题。; 关于"-set-xmark"的一些问题是关于"-xmark"的一些问题.在iptables中; javascript - 关于表单验证的一些问题; 关于fprint和指针的一些问题; 关于C ++ boost图库的一些问题; 关于python中开关的一些问题; 关于我自己的定位，一些问题; 一些问题＃2; 引起一些问题; 关于activex，线程和事件的一些问题; (adsbygoogle = window.adsbygoogle || []).push({}); ```
``` C/C++开发最新文章 应用程序无法启动，因为它无法找到或加载QT平台插件“窗口”; CMake错误在CMakeLists.txt：30（项目）：没有CMAKE_C_COMPILER可以找到; 未定义的引用google :: protobuf :: internal :: empty_string_ [abi：cxx11]; 什么0LL或0x0UL是什么意思？; 由于未定义的引用，无法获取OpenCV进行编译？; Visual Studio 2012 - 错误LNK1104：无法打开文件'glew32.lib'; 如何让cmake的CUDA找到; 由于捕获缓冲区，OpenCV VideoCapture延迟; LINK：致命错误LNK1248：映像大小超过最大允许大小（80000000）; C ++的错误：＆QUOT;数组必须用一个括号括起来的初始化＆QUOT初始化;; 热门教程 Java教程 Apache ANT 教程 Kali Linux教程 JavaScript教程 JavaFx教程 MFC 教程 Apache HTTP客户端教程 Microsoft Visio 教程 热门工具 Java 在线工具 C(GCC) 在线工具 PHP 在线工具 C# 在线工具 Python 在线工具 MySQL 在线工具 VB.NET 在线工具 Lua 在线工具 Oracle 在线工具 C++(GCC) 在线工具 Go 在线工具 Fortran 在线工具 ```
``` var eskeys = '关于,浮点,的,一些问题'; var cat = 'cc';';//cc ```
``` 登录 关闭 扫码关注1秒登录 发送“验证码”获取 | 15天全站免登陆 友情链接： IT屋 Chrome插件 谷歌浏览器插件 IT屋 ©2016-2022 琼ICP备2021000895号-1 站点地图 站点标签 SiteMap <免责申明> 本站内容来源互联网,如果侵犯您的权益请联系我们删除. var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?0c3a090f7b3c4ad458ac1296cb5cc779"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); ```