本文翻译自:What does the constant 0.0039215689 represent?

I keep seeing this constant pop up in various graphics header files 我一直看到这个常量弹出各种图形头文件

0.0039215689

It seems to have something to do with color maybe? 它似乎与颜色有关吗?

Here is the first hit on Google : 这是Google的第一个热门话题 :

void RDP_G_SETFOGCOLOR(void)
{Gfx.FogColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;Gfx.FogColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;Gfx.FogColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;Gfx.FogColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
}void RDP_G_SETBLENDCOLOR(void)
{Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);}
}//...more like this

What does this number represent? 这个数字代表什么? Why does no one seem to declare it as a const? 为什么似乎没有人将它声明为const?

I couldn't find anything on Google that explained it. 我无法在Google上找到解释它的任何内容。


#1楼

参考:https://stackoom.com/question/1Wuoj/常数-代表什么


#2楼

This multiplication by 0.0039215689f converts an integer valued color intensity in the range 0 to 255 to a real valued color intensity in the range 0 to 1. 乘以0.0039215689f将0到255范围内的整数值颜色强度转换为0到1范围内的实值颜色强度。

As Ilmari Karonen points out, even if this is an optimisation it's a rather badly expressed one. 正如Ilmari Karonen指出的那样,即使这是一个优化,它也是一个相当糟糕的表达。 It would be so much clearer to multiply by (1.0f/255) . 乘以(1.0f/255)会更加清晰。


#3楼

0.0039215689 is approximately equal to 1/255 . 0.0039215689约等于1/255

Seeing that this is OpenGL, performance is probably important. 看到这是OpenGL,性能可能很重要。 So it's probably safe to guess that this was done for performance reasons. 所以可以安全地猜测这是出于性能原因而做的。

Multiplying by the reciprocal is faster than repeatedly dividing by 255. 乘以倒数比重复除以255要快。


Side Note: 边注:

If you're wondering why such a micro-optimization isn't left to the compiler, it's because it is an unsafe floating-point optimization. 如果你想知道为什么这样的微优化不会留给编译器,那是因为它是一个不安全的浮点优化。 In other words: 换一种说法:

x / 255  !=  x * (1. / 255)

due to floating-point round-off errors. 由于浮点舍入错误。

So while modern compilers may be smart enough to do this optimization, they are not allowed to do it unless you explicitly tell them to via a compiler flag. 因此,虽然现代编译器可能足够聪明以进行此优化,但除非您通过编译器标志明确告诉它们,否则不允许它们执行此操作。

Related: Why doesn't GCC optimize a*a*a*a*a*a to (a*a*a)*(a*a*a)? 相关: 为什么GCC没有优化a * a * a * a * a * a到(a * a * a)*(a * a * a)?

常数0.0039215689代表什么?相关推荐

  1. 5、假设奖金税率如下(ma代表税前奖金且ma>0,r代表税率),利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款及实得奖金数(扣除奖金税后)。① 0 ≤ma<1000时,

    5.假设奖金税率如下(ma代表税前奖金且ma>0,r代表税率),利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款及实得奖金数(扣除奖金税后). ① 0 ≤ma<1000时 ...

  2. Android系统发展历程:1.0到4.0及代表机型

    今天我们来聊一聊Android系统的历史,首先我们就要先来说说Android系统这个名字的来历.Android这一次最先出现在法国作家利尔亚当在1886年发飙的科幻小说<未来夏娃>中,作者 ...

  3. 什么是以太坊,它是区块链2.0的代表,它又什么特点?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 以太坊 是一种全球共享计算,是各种分散应用程序的基础.它有一个独立于比特币的独立区块链,但与之类似.以太坊的区块链有显着 ...

  4. 为什么以太坊能成为区块链2.0的代表之作?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链的学习进入到第四天,前三天学习比特币,分别从比特币的前世.货币属性和背后的区块链技术学习. 比特币是区块链的1.0 ...

  5. macbook安装typescript环境added 1 package, and audited 2 packages in 26sfound 0 vulnerabilities代表成功了

    如果是台式机,自己是倾向于win系统的,奈何,macbook安装了双系统后,win系统的显示总是很小,找解决方法无果.所以只能用mac了. TypeScript的环境搭建_代码生病了-CSDN博客 根 ...

  6. 以太坊是什么?为什么说它是区块链2.0的代表

    通过深入了解比特币系统我们已经知道,区块链是源自比特币的底层技术,它让我们可以无须借助任何第三方中介直接进行价值表示和价值转移,它还给数字世界带来了价值表示物--通证.区块链将使互联网从"信 ...

  7. js数组indexof用法-1 0 1代表的意思

    arrNum = [1,2,8,9];console.log(arrNum.indexOf(1));//返回的是0,搜索整个数组里面有没有1,有的话返回下标0 console.log(arrNum.i ...

  8. 极限中0除以常数_考研数学极限重难点讲解003期【无穷小量和无穷大量】

    01 无穷小量与无穷大量的定义极限 1.无穷小量 定义1:以0为极限的变量,称为无穷小量.即若则称时f(x)为无穷小量,常数0也是无穷小.这里的可以是或是中的某一个,以下类似. 2.无穷大量 定义2: ...

  9. Python模拟轮盘抽奖游戏 轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的, 如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0.3)之间,代表2等奖, 如果范围

    .模拟轮盘抽奖游戏 轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的, 如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0.3)之间,代表2等奖, 如果范围在[0, ...

最新文章

  1. EBioMedicine:西湖大学郑钜圣组-乳制品摄入与肠道微生态、心血管代谢健康的关系...
  2. python使用urllib模块开发的多线程豆瓣小站mp3下载器
  3. 计算机丢失d3dcompiler,win7系统提示缺少D3DCompiler_47.dll文件怎么办
  4. 如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎
  5. python数据分析实况_Python数据分析实战:降雨量统计分析报告分析
  6. 如何控制if跳出_Wasm介绍之5:控制指令 | 火星技术帖
  7. python 生成exe 并 执行程序
  8. Ps 初学者教程,如何在照片中创建纹身合成?
  9. 安装jdk-linux-i586.rpm.bin
  10. python 生孩子朋友圈_生娃报喜朋友圈文案 孩子出生发朋友圈的话
  11. java优先级 六级和七级_百度知道六级和七级得区别是什么?如何升到七级?
  12. 图文详解PCB生产工艺流程
  13. 首月流水2.39亿美元,《原神》的发行策略是什么?
  14. CA签名是报的错误及解决方法
  15. Leetcode 665. Non-decreasing Array
  16. [宝塔版] 如何搭建一个微信小程序开源商城?
  17. 公众号(服务号)模板消息(个人通知)开发方案
  18. Linux ls的三个选项(l、h、a)
  19. 第1讲--tuxedo总体介绍
  20. 边沿检测电路的多种实现

热门文章

  1. UVA-1602 Lattice Animals 搜索问题(打表+set)
  2. 升级Exchange server 2010 SP1至SP3版本相关问题解决方法
  3. moosefs-1.6.10 安装手记
  4. Silverlight AutoCompleteBox(自动完成输入框控件)使用方法
  5. 腾讯PHP工程师面试题两份
  6. input type=file图片上传时,先预览
  7. c# 一种缓存模板
  8. JDK1.8聚合操作
  9. 用 Zabbix 监控值统计每个月触发器告警次数
  10. Hp Dell服务器硬件监控