主流架构(gcc、msvc、x86、x64、arm)中double与float浮点数保留精度(末尾清零)

这篇具有很好参考价值的文章主要介绍了主流架构(gcc、msvc、x86、x64、arm)中double与float浮点数保留精度(末尾清零)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

​​​​​​float 是单精度浮点数,内存占4个字节,有效数字8位,表示范围是 -3.40E+38~3.40E+38。

double 是双精度浮点数,内存占8个字节,有效数字16位,表示范是-1.79E+308~-1.79E+308。

    C和C++标准没有指定EDCOX1、1、EDCOX1、0和EDCOX1×9的表示。这三个都有可能实现为IEEE双精度。然而,对于大多数架构(gcc、msvc、x86、x64、arm),float实际上是一个IEEE单精度浮点数(binary32),double是一个IEEE双精度浮点数(binary64)。

    有时甚至double也不够精确,因此有时我们有long double1(上面的例子在Mac上给出了9.00000000000000066),但所有浮点类型都有舍入错误,因此,如果精度非常重要(例如,货币处理),则应使用int或分数类。

    浮点会由于精度问题,导致无法直接做 != 比较,下面是一个主流架构下,优化处理浮点精度的函数:文章来源地址https://www.toymoban.com/news/detail-719890.html

#include <cmath>

// fVal		原始浮点
// iPoint	保留精度(末尾将清零)
double getVal1(const double fVal, const int iPoint) {
    double factor = pow(10.0, iPoint);
    return floor(fVal * factor) / factor;
}

double getVal2(const double fVal, const int iPoint) {
    double factor = pow(10.0, iPoint);
    return round(fVal * factor) / factor;
}

double getVal3(const double fVal, const int iPoint) 
{
	double	multiplier = 1.0;
	int 	i;
	
	// Calculate the multiplier based on the number of decimal places to keep
	for (i = 0; i < iPoint; i++) {
		multiplier *= 10.0;
	}
	
	// Multiply the original value by the multiplier and round it to the nearest integer
	int roundedValue = (int)(fVal * multiplier + 0.5);
	
	// Divide the rounded value by the multiplier to get the final result
	double result = roundedValue / multiplier;
	
	return result;
}

到了这里,关于主流架构(gcc、msvc、x86、x64、arm)中double与float浮点数保留精度(末尾清零)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 主流的芯片架构x86,Arm,MIPS,Power,RISC-V

    x86架构: 特点:x86架构是一种 复杂指令集计算机(CISC)架构 ,具有广泛的软件和生态系统支持。它在个人计算机和服务器领域占据主导地位,提供高性能和广泛的兼容性。X86和ARM架构最本质的区别在于复杂指令集和精简指令集。主要面向家用、商用领域,在 性能和兼容性

    2024年02月07日
    浏览(48)
  • x86架构上构建arm64架构的docker镜像

    项目需要提供arm64架构上的centos7对应docker镜像,然后本地宿主机只有x86架构机器,因此需要在x86机器上构建centos arm64架构的docker镜像 宿主机操作系统:centos7.7 amd64架构 docker版本:19.03.15 ARM,AMD,X86,AArch64的概念可以参考: https://blog.csdn.net/Bubbler_726/article/details/88397357 下载 qemu-

    2024年02月11日
    浏览(63)
  • x86架构ubuntu 搭建arm64交叉编译环境及QT编译arm64架构工程

    背景:由于最近项目需要做国产系统适配,很多软件需要重新编译以适配不同架构CPU。 环境: 1、主机win10 64bit   vmware虚拟主机ubuntu1804 64bit 2、vmware虚拟主机已经安装了qt5.14.2及qt_create4.11.1 一、C/C++程序交叉编译 1、交叉编译环境搭建 ①选定编译工具aarch64-linux-gnu ②安装交叉

    2024年02月09日
    浏览(65)
  • X86架构下交叉编译arm64源代码

    glibc在/lib(/lib32 /lib64)目录下的.so文件为libc.so.6 glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有

    2023年04月21日
    浏览(54)
  • arm和x86架构服务器拉取arm64架构的docker镜像

    dockerhub提供的镜像部分支持arm64架构 Docker arm架构服务器拉取docker镜像,默认是arm架构  查看docker镜像的架构 x86平台拉取arm平台的docker镜像 对docker版本有限制 docker运行其他平台容器,需要使用--platform参数指定容器 docker19.03.9及以上版本才支持--platform参数 查看是否开启experi

    2024年01月20日
    浏览(68)
  • 使用QEMU(x86)模拟运行ARM64架构并进行内核调试

    在 x86 上使用 QEMU 虚拟机模拟并调试 ARM64。 参考:ubuntu虚拟机中使用QEMU搭建ARM64环境 主机 ubuntu 20.04, Linux 5.16.0 QEMU emulator version 7.2.92 (v8.0.0-rc2-23-gefcd0ec14b) :qemu-7.2.29 合适的ARM64内核源码:linux-4.14.221.tar.gz 安装交叉编译工具: sudo apt-get install gcc-aarch64-linux-gnu 命令安装以及源码

    2024年02月09日
    浏览(61)
  • X86和X64是什么意思?

    x86是对基于intel处理器的系统的标准缩写。X与处理器没有任何关系,它是一个对所有*86系统的简单的通配符定义,是一个intel通用计算机系列的编号,也标识一套通用的计算机指令集合,由于早期intel的CPU编号都是如8086,80286来编号,由于这整个系列的CPU都是指令兼容的,所以都用

    2024年02月06日
    浏览(40)
  • x86 32 64 Arm这些听过但不懂,都是什么?是架构还是系统?一文梳理

    x86 听过吗? 64位操作系统知道吧 和x86什么关系 32和64都是什么东西? 曾经的我也一头雾水,今天我才来整理一下,惭愧惭愧! 今天带着沉重的心情来梳理一下学习内容吧 如果你很熟悉很了解计算机的话,应该知道,处理器、操作系统、驱动、软件都有32位和64位之分,只不

    2024年04月29日
    浏览(59)
  • OpenGL环境配置(X86和X64不匹配)

    1. 创建一个存放项目文件的文件夹 eg.我的文件夹名为Graphics 2.解压code.rar和glut.rar,将解压后的文件放在Graphics中 glut.rar解压后的文件目录如下: 动态链接库文件 GLUT.DLL GLUT32.DLL 类型库文件 GLUT32.LIB 头文件 glut.h 3.找到自己的VS安装目录 传送门:查看安装路径的方法 我的安装路径

    2024年02月09日
    浏览(38)
  • 手机cpu架构查看及armeabi、armeabi-v7a、arm64-v8a及x86等说明

    win+R,输入cmd 填下指令如下 adb shell getprop ro.product.cpu.abi 1.armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它. 2.arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。 3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。

    2024年02月07日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包