当前位置: 首页 > news >正文

定点数,定点数二维向量,定点数三维向量,定点数数学类

定点数,定点数二维向量,定点数三维向量,定点数数学类

  • 介绍
  • 浮点数
  • 定点数
  • 封装的定点数FixedNumber
  • 定点数二维向量
  • 定点数三维向量
  • 定点数数学类
  • 总结

介绍

众所周知定点数是用于做帧同步时保持不同cpu不同设备保持一致稳定的代替浮点数的变量,这里提供了之前封装好的定点数、定点数二维向量、定点数三位向量、定点数数学类。这里不是物理库,知识定点数变量。
定点数类库

浮点数

浮点数也就是float占用4个字节,而定点数是8long类型占用8个字节。不同的cpu机器在计算浮点数的时候都会有微小的差错,比如unity面板中设置一个对象的位置Position,有时候你输入的是一个整数,后来变成了接近你这个整数的.99或者.998等(用Unity时间久的应该是能感受到)。这是因为你输入之后cpu是要经过计算显示出来的。那么这种情况下我们在做帧同步的时候每个机型不一样,计算出来的float也会有差别,帧同步中有微乎其微的差别计算到最后也会是巨大的差别,会影响整个比赛的结果。

定点数

定点数通常使用long类型来计算,这里说明一下为什么是long类型,比如说一个浮点数9.988879,那么定点数可以这样标识,前4个字节记录9988879、后4个字节记录小数点(.)在第几位,最后拼接成我们想要的结果,这样就能保证不同的机器中运算结果一致。

封装的定点数FixedNumber

具体的使用方式其实跟Int float差不太多,只是API可能略有不同,下面是定点数完整的代码,具体的用法我就不做详细说明了,我简单的说明一下
用法

// Update is called once per frame
void Update()
{if (Input.GetKeyDown(KeyCode.Space)){FixedNumber fn = new FixedNumber(f);Debug.LogError(fn);Debug.LogError(fn.GetValue());Debug.LogError(fn.ToFloat());}
}

定点数代码

using System;/// <summary>
/// 定点数 使用Int64实现
/// </summary>
[Serializable]
public struct FixedNumber
{/// <summary>/// 小数占用位数/// </summary>public static int Fix_Fracbits = 16;/// <summary>/// 0/// </summary>public static FixedNumber Zero = new FixedNumber(0);internal Int64 m_Bits;public FixedNumber(int x){m_Bits = (x << Fix_Fracbits);}public FixedNumber(float x){m_Bits = (Int64)((x) * (1 << Fix_Fracbits));}public FixedNumber(Int64 x){m_Bits = ((x) * (1 << Fix_Fracbits));}public Int64 GetValue(){return m_Bits;}public FixedNumber SetValue(Int64 i){m_Bits = i;return this;}public static FixedNumber Lerp(FixedNumber a, FixedNumber b, float t){return a + (b - a) * t;}public static FixedNumber Lerp(FixedNumber a, FixedNumber b, FixedNumber t){return a + (b - a) * t;}public FixedNumber Abs(){return FixedNumber.Abs(this);}public FixedNumber Sqrt(){return FixedNumber.Sqrt(this);}//******************* +  **************************public static FixedNumber operator +(FixedNumber p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits + p2.m_Bits;return tmp;}public static FixedNumber operator +(FixedNumber p1, int p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits + (Int64)(p2 << Fix_Fracbits);return tmp;}public static FixedNumber operator +(int p1, FixedNumber p2){return p2 + p1;}public static FixedNumber operator +(FixedNumber p1, Int64 p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits + p2 << Fix_Fracbits;return tmp;}public static FixedNumber operator +(Int64 p1, FixedNumber p2){return p2 + p1;}public static FixedNumber operator +(FixedNumber p1, float p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits + (Int64)(p2 * (1 << Fix_Fracbits));return tmp;}public static FixedNumber operator +(float p1, FixedNumber p2){FixedNumber tmp = p2 + p1;return tmp;}//*******************  -  **************************public static FixedNumber operator -(FixedNumber p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits - p2.m_Bits;return tmp;}public static FixedNumber operator -(FixedNumber p1, int p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits - (Int64)(p2 << Fix_Fracbits);return tmp;}public static FixedNumber operator -(int p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = (p1 << Fix_Fracbits) - p2.m_Bits;return tmp;}public static FixedNumber operator -(FixedNumber p1, Int64 p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits - (p2 << Fix_Fracbits);return tmp;}public static FixedNumber operator -(Int64 p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = (p1 << Fix_Fracbits) - p2.m_Bits;return tmp;}public static FixedNumber operator -(float p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = (Int64)(p1 * (1 << Fix_Fracbits)) - p2.m_Bits;return tmp;}public static FixedNumber operator -(FixedNumber p1, float p2){FixedNumber tmp;tmp.m_Bits = p1.m_Bits - (Int64)(p2 * (1 << Fix_Fracbits));return tmp;}//******************* * **************************public static FixedNumber operator *(FixedNumber p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = ((p1.m_Bits) * (p2.m_Bits)) >> (Fix_Fracbits);return tmp;}public static FixedNumber operator *(int p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = p1 * p2.m_Bits;return tmp;}public static FixedNumber operator *(FixedNumber p1, int p2){return p2 * p1;}public static FixedNumber operator *(FixedNumber p1, float p2){FixedNumber tmp;tmp.m_Bits = (Int64)(p1.m_Bits * p2);return tmp;}public static FixedNumber operator *(float p1, FixedNumber p2){FixedNumber tmp;tmp.m_Bits = (Int64)(p1 * p2.m_Bits);return tmp;}//******************* / **************************public static FixedNumber operator /(FixedNumber p1, FixedNumber p2){FixedNumber tmp;if (p2 == FixedNumber.Zero){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{tmp.m_Bits = (p1.m_Bits) * (1 << Fix_Fracbits) / (p2.m_Bits);}return tmp;}public static FixedNumber operator /(FixedNumber p1, int p2){FixedNumber tmp;if (p2 == 0){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{tmp.m_Bits = p1.m_Bits / (p2);}return tmp;}public static FixedNumber operator %(FixedNumber p1, int p2){FixedNumber tmp;if (p2 == 0){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{tmp.m_Bits = (p1.m_Bits % (p2 << Fix_Fracbits));}return tmp;}public static FixedNumber operator /(int p1, FixedNumber p2){FixedNumber tmp;if (p2 == Zero){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{Int64 tmp2 = ((Int64)p1 << Fix_Fracbits << Fix_Fracbits);tmp.m_Bits = tmp2 / (p2.m_Bits);}return tmp;}public static FixedNumber operator /(FixedNumber p1, Int64 p2){FixedNumber tmp;if (p2 == 0){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{tmp.m_Bits = p1.m_Bits / (p2);}return tmp;}public static FixedNumber operator /(Int64 p1, FixedNumber p2){FixedNumber tmp;if (p2 == Zero){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{if (p1 > Int32.MaxValue || p1 < Int32.MinValue){tmp.m_Bits = 0;return tmp;}tmp.m_Bits = (p1 << Fix_Fracbits) / (p2.m_Bits);}return tmp;}public static FixedNumber operator /(float p1, FixedNumber p2){FixedNumber tmp;if (p2 == Zero){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{Int64 tmp1 = (Int64)p1 * ((Int64)1 << Fix_Fracbits << Fix_Fracbits);tmp.m_Bits = (tmp1) / (p2.m_Bits);}return tmp;}public static FixedNumber operator /(FixedNumber p1, float p2){FixedNumber tmp;if (p2 > -0.000001f && p2 < 0.000001f){//UnityEngine.Debug.LogError("/0");tmp.m_Bits = Zero.m_Bits;}else{tmp.m_Bits = (p1.m_Bits << Fix_Fracbits) / ((Int64)(p2 * (1 << Fix_Fracbits)));}return tmp;}public static FixedNumber Sqrt(FixedNumber p1){FixedNumber tmp;Int64 ltmp = p1.m_Bits * (1 << Fix_Fracbits);tmp.m_Bits = (Int64)Math.Sqrt(ltmp);return tmp;}public static bool operator >(FixedNumber p1, FixedNumber p2){return (p1.m_Bits > p2.m_Bits) ? true : false;}public static bool operator <(FixedNumber p1, FixedNumber p2){return (p1.m_Bits < p2.m_Bits) ? true : false;}public static bool operator <=(FixedNumber p1, FixedNumber p2){return (p1.m_Bits <= p2.m_Bits) ? true : false;}public static bool operator >=(FixedNumber p1, FixedNumber p2){return (p1.m_Bits >= p2.m_Bits) ? true : false;}public static bool operator !=(FixedNumber p1, FixedNumber p2){return (p1.m_Bits != p2.m_Bits) ? true : false;}public static bool operator ==(FixedNumber p1, FixedNumber p2){return (p1.m_Bits == p2.m_Bits) ? true : false;}public static bool Equals(FixedNumber p1, FixedNumber p2){return (p1.m_Bits == p2.m_Bits) ? true : false;}public bool Equals(FixedNumber right){if (m_Bits == right.m_Bits){return true;}return false;}public static bool operator >(FixedNumber p1, float p2){return (p1.m_Bits > (p2 * (1 << Fix_Fracbits))) ? true : false;}public static bool operator <(FixedNumber p1, float p2){return (p1.m_Bits < (p2 * (1 << Fix_Fracbits))) ? true : false;}public static bool operator <=(FixedNumber p1, float p2){return (p1.m_Bits <= p2 * (1 << Fix_Fracbits)) ? true : false;}public static bool operator >=(FixedNumber p1, float p2){return (p1.m_Bits >= p2 * (1 << Fix_Fracbits)) ? true : false;}public static bool operator !=(FixedNumber p1, float p2){return (p1.m_Bits != p2 * (1 << Fix_Fracbits)) ? true : false;}public static bool operator ==(FixedNumber p1, float p2){return (p1.m_Bits == p2 * (1 << Fix_Fracbits)) ? true : false;}public static FixedNumber Max(){FixedNumber tmp;tmp.m_Bits = Int64.MaxValue;return tmp;}public static FixedNumber Max(FixedNumber p1, FixedNumber p2){return p1.m_Bits > p2.m_Bits ? p1 : p2;}public static FixedNumber Min(FixedNumber p1, FixedNumber p2){return p1.m_Bits < p2.m_Bits ? p1 : p2;}public static FixedNumber Precision(){FixedNumber tmp;tmp.m_Bits = 1;return tmp;}public static FixedNumber MaxValue(){FixedNumber tmp;tmp.m_Bits = Int64.MaxValue;return tmp;}public static FixedNumber Abs(FixedNumber P1){FixedNumber tmp;tmp.m_Bits = Math.Abs(P1.m_Bits);return tmp;}public static FixedNumber operator -(FixedNumber p1){FixedNumber tmp;tmp.m_Bits = -p1.m_Bits;return tmp;}public float ToFloat(){return m_Bits / (float)(1 << Fix_Fracbits);}public UnityEngine.Quaternion ToUnityRotation(){return UnityEngine.Quaternion.Euler(0, -this.ToFloat(), 0);}public int ToInt(){return (int)(m_Bits >> (Fix_Fracbits));}public override string ToString(){double tmp = (double)m_Bits / (double)(1 << Fix_Fracbits);return tmp.ToString();}
}

定点数二维向量

using UnityEngine;/// <summary>
/// 定点数二维向量
/// </summary>
[System.Serializable]
public struct Fixed2
{public FixedNumber x;public FixedNumber y;public Fixed2(float x, float y){this.x = new FixedNumber(x);this.y = new FixedNumber(y);}public Fixed2(FixedNumber x, FixedNumber y){this.x = x;this.y = y;}public Vector3 ToVector3(){return new Vector3(x.ToFloat(), 0, y.ToFloat());}public static Fixed2 GetV2(FixedNumber x, FixedNumber y){return new Fixed2(x, y);}public static Fixed2 operator +(Fixed2 a, Fixed2 b){return new Fixed2(a.x + b.x, a.y + b.y);}public static Fixed2 operator -(Fixed2 a, Fixed2 b){return new Fixed2(a.x - b.x, a.y - b.y);}public static Fixed2 operator *(Fixed2 a, FixedNumber b){return new Fixed2(a.x * b, a.y * b);}public Fixed2 Rotate(FixedNumber value){FixedNumber tx, ty;tx = MathFixed.CosAngle(value) * x - y * MathFixed.SinAngle(value);ty = MathFixed.CosAngle(value) * y + x * MathFixed.SinAngle(value);//1,0   tx=1*0-0  tyreturn new Fixed2(tx, ty);}public FixedNumber ToRotation(){if (x == 0 && y == 0){return new FixedNumber();}FixedNumber sin = this.normalized.y;if (this.x >= 0){return MathFixed.Asin(sin) / MathFixed.PI * 180;}else{return MathFixed.Asin(-sin) / MathFixed.PI * 180 + 180;}}public static Fixed2 Parse(FixedNumber ratio){return new Fixed2(MathFixed.CosAngle(ratio), MathFixed.SinAngle(ratio));}public Fixed2 normalized{get{if (x == 0 && y == 0){return new Fixed2();}FixedNumber n = ((x * x) + (y * y)).Sqrt();return new Fixed2(x / n, y / n);}}public static Fixed2 left = new Fixed2(-1, 0);public static Fixed2 right = new Fixed2(1, 0);public static Fixed2 up = new Fixed2(0, 1);public static Fixed2 down = new Fixed2(0, -1);public static Fixed2 zero = new Fixed2(0, 0);public FixedNumber Dot(Fixed2 b){return Dot(this, b);}public static FixedNumber Dot(Fixed2 a, Fixed2 b){return a.x * b.x + b.y * a.y;}public static Fixed2 operator -(Fixed2 a){return new Fixed2(-a.x, -a.y);}public static Fixed3 operator *(Fixed2 a, Fixed2 b){return new Fixed3(new FixedNumber(), new FixedNumber(), a.x * b.y - a.y * b.x);}public static bool operator ==(Fixed2 a, Fixed2 b){return a.x == b.x && a.y == b.y;}public static bool operator !=(Fixed2 a, Fixed2 b){return a.x != b.x || a.y != b.y;}public override string ToString(){return "{" + x.ToString() + "," + y.ToString() + "}";}}

定点数三维向量

using UnityEngine;/// <summary>
/// 定点数三维向量
/// </summary>
public struct Fixed3
{public FixedNumber x{get;private set;}public FixedNumber y{get;private set;}public FixedNumber z{get;private set;}public Fixed3(int x = 0, int y = 0, int z = 0){this.x = new FixedNumber(x);this.y = new FixedNumber(y);this.z = new FixedNumber(z);}public Fixed3(float x, float y, float z){this.x = new FixedNumber(x);this.y = new FixedNumber(y);this.z = new FixedNumber(z);}public Fixed3(FixedNumber x, FixedNumber y, FixedNumber z){this.x = x;this.y = y;this.z = z;}public Vector3 ToVector3(){return new Vector3(x.ToFloat(), 0, y.ToFloat());}public static Fixed3 operator +(Fixed3 a, Fixed3 b){return new Fixed3(a.x + b.x, a.y + b.y, a.z + b.z);}public static Fixed3 operator -(Fixed3 a, Fixed3 b){return new Fixed3(a.x - b.x, a.y - b.y, a.z - b.z);}public static Fixed3 left = new Fixed3(-1, 0);public static Fixed3 right = new Fixed3(1, 0);public static Fixed3 up = new Fixed3(0, 1);public static Fixed3 down = new Fixed3(0, -1);public static Fixed3 zero = new Fixed3(0, 0);public FixedNumber Dot(Fixed3 b){return Dot(this, b);}public static FixedNumber Dot(Fixed3 a, Fixed3 b){return a.x * b.x + b.y * a.y;}public static Fixed3 operator -(Fixed3 a){return new Fixed3(-a.x, -a.y, -a.z);}public static Fixed2 operator *(Fixed3 a, Fixed2 b){return new Fixed2(-a.z * b.y, a.z * b.x);}public override string ToString(){return "{" + x.ToString() + "," + y.ToString() + "}";}
}

定点数数学类

using System.Collections.Generic;/// <summary>
/// 定点数数学类
/// </summary>
class MathFixed
{protected static int tabCount = 18 * 4;/// <summary>/// sin值对应表/// </summary>protected static readonly List<FixedNumber> _m_SinTab = new List<FixedNumber>();public static readonly FixedNumber PI = new FixedNumber(3.14159265f);protected static FixedNumber GetSinTab(FixedNumber r){FixedNumber i = new FixedNumber(r.ToInt());//UnityEngine.Debug.Log(i.ToInt());if (i.ToInt() == _m_SinTab.Count - 1){return _m_SinTab[(int)i.ToInt()];}else{// UnityEngine.Debug.Log(i.ToInt()+":"+ _m_SinTab[i.ToInt()]+":"+ Ratio.Lerp(_m_SinTab[i.ToInt()], _m_SinTab[(i + 1).ToInt()], r - i));return FixedNumber.Lerp(_m_SinTab[(int)i.ToInt()], _m_SinTab[(int)(i + 1).ToInt()], r - i);}}public static FixedNumber GetAsinTab(FixedNumber sin){MathFixed math = Instance;//UnityEngine.Debug.Log("GetAsinTab");for (int i = _m_SinTab.Count - 1; i >= 0; i--){if (sin > _m_SinTab[i]){if (i == _m_SinTab.Count - 1){return new FixedNumber(i) / (tabCount / 4) * (PI / 2);}else{//return new Ratio(i);return FixedNumber.Lerp(new FixedNumber(i), new FixedNumber(i + 1), (sin - _m_SinTab[i]) / (_m_SinTab[i + 1] - _m_SinTab[i])) / (tabCount / 4) * (PI / 2);}}}return new FixedNumber();}protected static MathFixed Instance{get{if (_m_instance == null){_m_instance = new MathFixed();}return _m_instance;}}protected static MathFixed _m_instance;protected MathFixed(){if (_m_instance == null){_m_SinTab.Add(new FixedNumber(0f));//0_m_SinTab.Add(new FixedNumber(0.08715f));_m_SinTab.Add(new FixedNumber(0.17364f));_m_SinTab.Add(new FixedNumber(0.25881f));_m_SinTab.Add(new FixedNumber(0.34202f));//20_m_SinTab.Add(new FixedNumber(0.42261f));_m_SinTab.Add(new FixedNumber(0.5f));_m_SinTab.Add(new FixedNumber(0.57357f));//35_m_SinTab.Add(new FixedNumber(0.64278f));_m_SinTab.Add(new FixedNumber(0.70710f));_m_SinTab.Add(new FixedNumber(0.76604f));_m_SinTab.Add(new FixedNumber(0.81915f));//55_m_SinTab.Add(new FixedNumber(0.86602f));//60_m_SinTab.Add(new FixedNumber(0.90630f));_m_SinTab.Add(new FixedNumber(0.93969f));_m_SinTab.Add(new FixedNumber(0.96592f));_m_SinTab.Add(new FixedNumber(0.98480f));//80_m_SinTab.Add(new FixedNumber(0.99619f));_m_SinTab.Add(new FixedNumber(1f));}}public static FixedNumber PiToAngel(FixedNumber pi){return pi / PI * 180;}public static FixedNumber Asin(FixedNumber sin){if (sin < -1 || sin > 1) { return new FixedNumber(); }if (sin >= 0){return GetAsinTab(sin);}else{return -GetAsinTab(-sin);}}public static FixedNumber Sin(FixedNumber r){MathFixed math = Instance;//int tabCount = SinTab.Count*4;FixedNumber result = new FixedNumber();r = (r * tabCount / 2 / PI);//int n = r.ToInt();while (r < 0){r += tabCount;}while (r > tabCount){r -= tabCount;}if (r >= 0 && r <= tabCount / 4)                // 0 ~ PI/2{result = GetSinTab(r);}else if (r > tabCount / 4 && r < tabCount / 2)       // PI/2 ~ PI{r -= new FixedNumber(tabCount / 4);result = GetSinTab(new FixedNumber(tabCount / 4) - r);}else if (r >= tabCount / 2 && r < 3 * tabCount / 4)    // PI ~ 3/4*PI{r -= new FixedNumber(tabCount / 2);result = -GetSinTab(r);}else if (r >= 3 * tabCount / 4 && r < tabCount)      // 3/4*PI ~ 2*PI{r = new FixedNumber(tabCount) - r;result = -GetSinTab(r);}return result;}public static FixedNumber Abs(FixedNumber ratio){return FixedNumber.Abs(ratio);}public static FixedNumber Sqrt(FixedNumber r){return FixedNumber.Sqrt(r);}public static FixedNumber Cos(FixedNumber r){return Sin(r + PI / 2);}public static FixedNumber SinAngle(FixedNumber angle){return Sin(angle / 180 * PI);}public static FixedNumber CosAngle(FixedNumber angle){return Cos(angle / 180 * PI);}
}

总结

上面做的封装基本还算完善,可以看下代码具体怎么使用。
感谢大家的支持

相关文章:

定点数,定点数二维向量,定点数三维向量,定点数数学类

定点数&#xff0c;定点数二维向量&#xff0c;定点数三维向量&#xff0c;定点数数学类 介绍浮点数定点数封装的定点数FixedNumber定点数二维向量定点数三维向量定点数数学类总结 介绍 众所周知定点数是用于做帧同步时保持不同cpu不同设备保持一致稳定的代替浮点数的变量&…...

安装ts-node有感

起因&#xff1a;想要在vsCode上运行ts脚本 解决方案&#xff1a; 1.安装vsCode插件 code runner 2.全局安装ts-node 这一步遇到三个问题&#xff1a; ①.node版本问题&#xff1a;需安装版本18以上node&#xff0c;可使用nvm去控制不同的node版本 ②.certificate has exp…...

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录 探针的生命周期流程图prestop 探针的生命周期 docker 创建&#xff1a;在创建阶段&#xff0c;你需要选择一个镜像来运行你的应用。这个镜像可以是公开的&#xff0c;如 Docker Hub 上的镜像&#xff0c;也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一…...

顺子日期 蓝桥杯

调用API 思路: 设置Calendar的属性&#xff0c;获取Calendar的毫秒数&#xff0c;转换成指定格式的字符串(yyyyMMdd)&#xff0c;判断字符串中是否包含符合条件的&#xff0c;若有就1&#xff0c; 迭代: 每次循环给Calendar加上一天即可 import java.text.SimpleDateFormat; im…...

基于 Python 的景区票务人脸识别系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

OpenAI全新发布的Sora,到底意味着什么?

16日凌晨&#xff0c;OpenAI发布了文本视频的工具&#xff08;text-do-video&#xff09;Sora&#xff0c;整个世界再次被震撼。 Sora的出现&#xff0c;到底意味着什么&#xff1f; 目录 Sora的背景与概述Sora是什么&#xff1f;能为我们做些什么&#xff1f;存在的一些问题 文…...

预防.locked.locked1勒索病毒攻击:保护数据安全

导言&#xff1a; 随着科技的发展&#xff0c;网络安全问题日益严重&#xff0c;其中勒索病毒是一种令人头痛的威胁。.locked和.locked1是两种常见的勒索病毒&#xff0c;它们会将用户的数据文件加密&#xff0c;并要求支付赎金以获取解密密钥。本文将介绍这两种勒索病毒的特点…...

【力扣hot100】刷题笔记Day5

前言 回学校了&#xff0c;荒废了半天之后打算奋发图强猛猛刷题&#xff0c;找实习&#xff01;赚钱&#xff01;&#xff01; 560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 前缀法 哈希表 这个题解解释比官方清晰&#xff0c;截个图方便看&#xff0c;另一…...

解锁Spring Boot中的设计模式—04.桥接模式:探索【桥接模式】的奥秘与应用实践!

桥接模式 桥接模式也称为桥梁模式、接口模式或者柄体&#xff08;Handle and Body&#xff09;模式&#xff0c;是将抽象部分与他的具体实现部分分离&#xff0c;使它们都可以独立地变化&#xff0c;通过组合的方式建立两个类之间的联系&#xff0c;而不是继承。 桥接模式是一种…...

[talib][python]ta-lib所有whl文件下载地址汇总

TA-Lib-0.4.28-cp312-cp312-win-amd64.whl下载地址&#xff1a;https://download.csdn.net/download/FL1623863129/88589956 ta-lib-0.4.25-cp311-cp311-win-amd64.whl下载地址&#xff1a;https://download.csdn.net/download/FL1623863129/88265329 TA-Lib-0.4.24-cp310-cp31…...

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…...

锁相放大器,数字锁相放大器.C和python版的源代码

数字锁相放大器. 锁相放大器, 它是一种可以从高噪声环境中提取出特定频率信号的放大器&#xff0c;工作原理主要是利用正弦函数的正交性进行信号的相位检测和幅值测量。如果你对锁相放大器感兴趣&#xff0c;我可以给你更详细的解释。 数字锁相放大器是利用软件算法来实现提取…...

(02)Hive SQL编译成MapReduce任务的过程

目录 一、架构及组件介绍 1.1 Hive底层架构 1.2 Hive组件 1.3 Hive与Hadoop交互过程 二、Hive SQL 编译成MR任务的流程 2.1 HQL转换为MR源码整体流程介绍 2.2 程序入口—CliDriver 2.3 HQL编译成MR任务的详细过程—Driver 2.3.1 将HQL语句转换成AST抽象语法树 词法、语…...

【C++初阶】值得一刷的字符串string相关oj题

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)

文章目录 10.1 构建微服务架构 - 探索 Go 语言的微观世界10.1.1 基础知识讲解10.1.2 重点案例&#xff1a;订单处理系统订单服务测试服务 10.1.3 拓展案例 1&#xff1a;用户认证服务安装所需的包实现用户模型和存储实现 JWT 生成和验证实现认证服务测试服务 10.1.4 拓展案例 2…...

代码随想录算法训练营第34天| Leetcode 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

文章目录 Leetcode 860.柠檬水找零Leetcode 406.根据身高重建队列Leetcode 452. 用最少数量的箭引爆气球 Leetcode 860.柠檬水找零 题目链接&#xff1a;Leetcode 860.柠檬水找零 题目描述&#xff1a; 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的…...

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习&#xff0c;这篇我将初步学习二叉树&#xff01;&#xff01;&#xff08;新年快乐&#xff01;&#xff09; 目录 二叉树 1、定义&#xff1a; 2、特点&#xff1a; 3、基本形态&#xff1a; 4、二叉树的种类&#xff1a; &…...

AI大模型学习笔记之四:生成式人工智能(AIGC)是如何工作的?

OpenAI 发布 ChatGPT 已经1年多了&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;也已经广为人知&#xff0c;我们常常津津乐道于 ChatGPT 和 Claude 这样的人工智能系统能够神奇地生成文本与我们对话&#xff0c;并且能够记忆上下文情境。 Midjunery和DALLE 这样的AI…...

bat脚本 创建计划任务 一分钟设置ntp同步周期为60s

要在Windows中使用批处理脚本&#xff08;.bat&#xff09;创建一个计划任务来每分钟同步一次NTP时间&#xff0c;你可以使用schtasks命令来创建计划任务。下面是一个示例脚本&#xff0c;展示了如何创建这样一个计划任务&#xff1a; echo off set "taskNameSyncNTP"…...

python数据分析numpy基础之mean用法和示例

1 python数据分析numpy基础之mean用法和示例 python的numpy库的mean()函数&#xff0c;用于计算沿指定轴(一个轴或多个轴)的算术平均值。 用法 numpy.mean(a, axisNone, dtypeNone, outNone, keepdims<no value>, *, where<no value>)描述 返回数组元素的平均值…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...