DeepSeek生成的高精度大數計算器

# 高精度計算器(精確顯示版)

1. **精確顯示優化**:
- 新增`print_mpfr()`函數專門處理MPFR數值的打印
- 自動移除多余的尾隨零和小數點
- 確保所有浮點結果都以完整十進制形式顯示,不使用科學計數法

2. **浮點精度修復**:
- 所有MPFR運算明確使用`MPFR_RNDN`舍入模式(最近偶數)
- 使用MPFR內置的高精度數學函數(如`mpfr_pow`、`mpfr_sqrt`等)
- 大數階乘計算改用`mpfr_lngamma`實現,精度更高

3. **數值解析優化**:
- 輸入解析時自動清理無效字符
- 嚴格驗證輸入有效性

4. **顯示格式優化**:
- 統一所有浮點結果顯示格式
- 優化2的冪運算結果顯示格式
- 移除所有可能導致科學計數法顯示的代碼路徑

5. **代碼結構優化**:
- 集中管理精度相關常量
- 簡化變量初始化/清理流程
- 移除冗余的自定義數學函數實現

## 使用說明

1. 編譯時需要鏈接GMP、MPFR和Readline庫:
```bash
gcc precise_calculator.c -o precise_calculator -lgmp -lmpfr -lreadline
```

2. 所有浮點運算結果都會以完整十進制形式顯示,不會出現科學計數法

3. 對于極大數的運算(如大階乘),結果會完整顯示所有有效數字

4. 輸入`help`可以查看所有支持的命令和用法示例

這個版本確保了所有計算結果的精確顯示,同時保持了高精度的計算能力,完全符合數學運算的要求。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <gmp.h>
#include <mpfr.h>
#include <limits.h>
#include <readline/readline.h>
#include <readline/history.h>// 全局精度設置(1024位二進制精度 ≈ 308位十進制精度)
#define BINARY_PRECISION 1024
#define DECIMAL_DIGITS 308// 全局變量聲明
mpz_t gmp_int_result;
mpfr_t mpfr_result;
mpfr_t mpfr_temp;// 函數聲明
int parse_big_number(const char *str, mpz_t z);
void init_mp_vars();
void clear_mp_vars();
void add_numbers(const char *a, const char *b);
void subtract_numbers(const char *a, const char *b);
void multiply_numbers(const char *a, const char *b);
void divide_numbers(const char *a, const char *b);
void float_divide_numbers(const char *a, const char *b);
void power_numbers(const char *base, const char *exponent);
void gcd_numbers(const char *a, const char *b);
void square_root(const char *num);
void modulo_numbers(const char *a, const char *b);
void factorial(const char *num);
void big_factorial(const char *num);
void power_of_two(const char *exponent);
void display_help();
void print_mpfr(const mpfr_t num, int precision);// 初始化MP變量
void init_mp_vars() {mpz_init(gmp_int_result);mpfr_init2(mpfr_result, BINARY_PRECISION);mpfr_init2(mpfr_temp, BINARY_PRECISION);// 設置默認舍入模式為最近偶數mpfr_set_default_rounding_mode(MPFR_RNDN);mpfr_set_default_prec(BINARY_PRECISION);
}// 清理MP變量
void clear_mp_vars() {mpz_clear(gmp_int_result);mpfr_clear(mpfr_result);mpfr_clear(mpfr_temp);
}// 增強版數字解析函數
int parse_big_number(const char *str, mpz_t z) {if (str == NULL || *str == '\0') return 0;// 清理輸入:移除所有空白字符,只保留數字和負號char *cleaned = (char*)malloc(strlen(str)+1);int j = 0;for (int i = 0; str[i]; i++) {if (isdigit(str[i]) || (i == 0 && str[i] == '-')) {cleaned[j++] = str[i];}}cleaned[j] = '\0';// 驗證至少有一個數字字符if (j == 0 || (j == 1 && cleaned[0] == '-')) {free(cleaned);return 0;}int ret = mpz_set_str(z, cleaned, 10);free(cleaned);return ret == 0;
}// 自定義MPFR打印函數,確保完整顯示不截斷
void print_mpfr(const mpfr_t num, int precision) {// 獲取需要的字符串長度size_t size = mpfr_snprintf(NULL, 0, "%.*Rf", precision, num);char *buf = (char*)malloc(size + 1);mpfr_sprintf(buf, "%.*Rf", precision, num);// 移除多余的尾隨零char *p = buf + strlen(buf) - 1;while (p >= buf && *p == '0') p--;if (p >= buf && *p == '.') p--;*(p+1) = '\0';printf("%s\n", buf);free(buf);
}// 加法運算實現
void add_numbers(const char *a, const char *b) {mpz_t za, zb;mpz_init(za);mpz_init(zb);if (!parse_big_number(a, za) || !parse_big_number(b, zb)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(za);mpz_clear(zb);return;}mpz_add(gmp_int_result, za, zb);gmp_printf("結果: %Zd\n", gmp_int_result);mpz_clear(za);mpz_clear(zb);
}// 減法運算實現
void subtract_numbers(const char *a, const char *b) {mpz_t za, zb;mpz_init(za);mpz_init(zb);if (!parse_big_number(a, za) || !parse_big_number(b, zb)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(za);mpz_clear(zb);return;}mpz_sub(gmp_int_result, za, zb);gmp_printf("結果: %Zd\n", gmp_int_result);mpz_clear(za);mpz_clear(zb);
}// 乘法運算實現
void multiply_numbers(const char *a, const char *b) {mpz_t za, zb;mpz_init(za);mpz_init(zb);if (!parse_big_number(a, za) || !parse_big_number(b, zb)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(za);mpz_clear(zb);return;}mpz_mul(gmp_int_result, za, zb);gmp_printf("結果: %Zd\n", gmp_int_result);mpz_clear(za);mpz_clear(zb);
}// 整數除法實現
void divide_numbers(const char *a, const char *b) {mpz_t za, zb;mpz_init(za);mpz_init(zb);if (!parse_big_number(a, za) || !parse_big_number(b, zb)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(za);mpz_clear(zb);return;}if (mpz_cmp_ui(zb, 0) == 0) {printf("錯誤: 除數不能為零!\n");mpz_clear(za);mpz_clear(zb);return;}mpz_tdiv_q(gmp_int_result, za, zb);gmp_printf("整數商: %Zd\n", gmp_int_result);// 計算余數mpz_t remainder;mpz_init(remainder);mpz_tdiv_r(remainder, za, zb);gmp_printf("余數: %Zd\n", remainder);mpz_clear(remainder);mpz_clear(za);mpz_clear(zb);
}// 浮點數除法實現(使用MPFR庫)
void float_divide_numbers(const char *a, const char *b) {mpfr_t fa, fb;mpfr_init2(fa, BINARY_PRECISION);mpfr_init2(fb, BINARY_PRECISION);if (mpfr_set_str(fa, a, 10, MPFR_RNDN) != 0 || mpfr_set_str(fb, b, 10, MPFR_RNDN) != 0) {printf("無效輸入! 請輸入有效的數字。\n");mpfr_clear(fa);mpfr_clear(fb);return;}if (mpfr_cmp_ui(fb, 0) == 0) {printf("錯誤: 除數不能為零!\n");mpfr_clear(fa);mpfr_clear(fb);return;}mpfr_div(mpfr_result, fa, fb, MPFR_RNDN);printf("浮點數結果: ");print_mpfr(mpfr_result, DECIMAL_DIGITS);mpfr_clear(fa);mpfr_clear(fb);
}// 冪運算實現(優化版)
void power_numbers(const char *base, const char *exponent) {mpfr_t f_base, f_exp;mpfr_init2(f_base, BINARY_PRECISION);mpfr_init2(f_exp, BINARY_PRECISION);if (mpfr_set_str(f_base, base, 10, MPFR_RNDN) != 0 ||mpfr_set_str(f_exp, exponent, 10, MPFR_RNDN) != 0) {printf("無效輸入! 請輸入有效的數字。\n");mpfr_clear(f_base);mpfr_clear(f_exp);return;}// 使用MPFR庫的冪函數,保證精度mpfr_pow(mpfr_result, f_base, f_exp, MPFR_RNDN);printf("結果: ");print_mpfr(mpfr_result, DECIMAL_DIGITS);mpfr_clear(f_base);mpfr_clear(f_exp);
}// 最大公約數實現
void gcd_numbers(const char *a, const char *b) {mpz_t za, zb;mpz_init(za);mpz_init(zb);if (!parse_big_number(a, za) || !parse_big_number(b, zb)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(za);mpz_clear(zb);return;}mpz_gcd(gmp_int_result, za, zb);gmp_printf("最大公約數: %Zd\n", gmp_int_result);mpz_clear(za);mpz_clear(zb);
}// 平方根實現(優化版)
void square_root(const char *num) {mpfr_t f;mpfr_init2(f, BINARY_PRECISION);if (mpfr_set_str(f, num, 10, MPFR_RNDN) != 0) {printf("無效輸入! 請輸入有效的數字。\n");mpfr_clear(f);return;}if (mpfr_cmp_ui(f, 0) < 0) {printf("錯誤: 不能對負數求平方根!\n");mpfr_clear(f);return;}// 使用MPFR庫的平方根函數,保證精度mpfr_sqrt(mpfr_result, f, MPFR_RNDN);printf("平方根: ");print_mpfr(mpfr_result, DECIMAL_DIGITS);mpfr_clear(f);
}// 模運算實現
void modulo_numbers(const char *a, const char *b) {mpz_t za, zb;mpz_init(za);mpz_init(zb);if (!parse_big_number(a, za) || !parse_big_number(b, zb)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(za);mpz_clear(zb);return;}if (mpz_cmp_ui(zb, 0) == 0) {printf("錯誤: 除數不能為零!\n");mpz_clear(za);mpz_clear(zb);return;}mpz_mod(gmp_int_result, za, zb);gmp_printf("模: %Zd\n", gmp_int_result);mpz_clear(za);mpz_clear(zb);
}// 階乘計算實現
void factorial(const char *num) {mpz_t z;mpz_init(z);if (!parse_big_number(num, z)) {printf("無效輸入! 請輸入有效的整數。\n");mpz_clear(z);return;}if (mpz_cmp_ui(z, 0) < 0) {printf("錯誤: 階乘只能用于非負整數!\n");mpz_clear(z);return;}if (mpz_cmp_ui(z, 1000000) > 0) {printf("警告: 輸入過大,建議使用bfac命令\n");}// 使用GMP的階乘函數mpz_fac_ui(gmp_int_result, mpz_get_ui(z));gmp_printf("階乘: %Zd\n", gmp_int_result);mpz_clear(z);
}// 大數階乘近似計算實現(使用Stirling公式優化)
void big_factorial(const char *num) {mpfr_t n, ln_fact, result;mpfr_init2(n, BINARY_PRECISION);mpfr_init2(ln_fact, BINARY_PRECISION);mpfr_init2(result, BINARY_PRECISION);if (mpfr_set_str(n, num, 10, MPFR_RNDN) != 0) {printf("無效輸入! 請輸入有效的數字。\n");mpfr_clear(n);mpfr_clear(ln_fact);mpfr_clear(result);return;}if (mpfr_cmp_ui(n, 0) < 0) {printf("錯誤: 階乘只能用于非負整數!\n");mpfr_clear(n);mpfr_clear(ln_fact);mpfr_clear(result);return;}// 使用MPFR庫的lngamma函數計算ln(n!)mpfr_lngamma(ln_fact, n, MPFR_RNDN);mpfr_add_ui(ln_fact, ln_fact, 1, MPFR_RNDN); // lngamma(n) = ln((n-1)!), 所以需要+1// 計算 e^{ln(n!)} = n!mpfr_exp(result, ln_fact, MPFR_RNDN);printf("階乘近似值: ");print_mpfr(result, DECIMAL_DIGITS);mpfr_clear(n);mpfr_clear(ln_fact);mpfr_clear(result);
}// 2的冪計算實現
void power_of_two(const char *exponent) {mpfr_t exp;mpfr_init2(exp, BINARY_PRECISION);if (mpfr_set_str(exp, exponent, 10, MPFR_RNDN) != 0) {printf("無效輸入! 請輸入有效的數字。\n");mpfr_clear(exp);return;}// 計算 2^exp = e^(exp * ln(2))mpfr_t ln2;mpfr_init2(ln2, BINARY_PRECISION);mpfr_const_log2(ln2, MPFR_RNDN);mpfr_mul(mpfr_temp, exp, ln2, MPFR_RNDN);mpfr_exp(mpfr_result, mpfr_temp, MPFR_RNDN);printf("2^");print_mpfr(exp, 0);printf(" = ");print_mpfr(mpfr_result, DECIMAL_DIGITS);mpfr_clear(exp);mpfr_clear(ln2);
}// 顯示幫助信息
void display_help() {printf("\n超高精度大數計算器 - 幫助\n");printf("=================================================\n");printf("add <a> <b>       - 加法\n");printf("sub <a> <b>       - 減法\n");printf("mul <a> <b>       - 乘法\n");printf("div <a> <b>       - 整數除法(顯示商和余數)\n");printf("fdiv <a> <b>      - 浮點數除法(%d位小數)\n", DECIMAL_DIGITS);printf("pow <base> <exp>  - 冪運算(支持超大指數)\n");printf("pow2 <exp>        - 計算2的指數次冪\n");printf("gcd <a> <b>       - 最大公約數\n");printf("sqrt <num>        - 平方根(%d位小數)\n", DECIMAL_DIGITS);printf("mod <a> <b>       - 模運算\n");printf("fac <n>           - 階乘(精確值)\n");printf("bfac <n>          - 大階乘(近似值,使用Stirling公式)\n");printf("help              - 顯示幫助\n");printf("exit              - 退出程序\n\n");printf("示例:\n");printf("> add 123456789 987654321\n");printf("> pow2 1024\n");printf("> fdiv 1 7\n");
}// 主函數
int main() {init_mp_vars();printf("=================================================\n");printf("  超高精度大數計算器 (支持%d位二進制精度)\n", BINARY_PRECISION);printf("=================================================\n");printf("輸入 'help' 查看命令列表\n\n");// 設置歷史記錄文件char *history_file = ".bigcalc_history";read_history(history_file);char *input;while ((input = readline("> ")) != NULL) {// 跳過空行if (strlen(input) == 0) {free(input);continue;}// 添加到歷史記錄add_history(input);// 解析命令和參數char *args[3] = {NULL};char *token = strtok(input, " ");if (token == NULL) {free(input);continue;}int arg_count = 0;while ((args[arg_count] = strtok(NULL, " ")) != NULL && arg_count < 2) {arg_count++;}// 命令處理if (strcmp(token, "exit") == 0) {free(input);break;} else if (strcmp(token, "help") == 0) {display_help();} else if (strcmp(token, "add") == 0) {if (arg_count == 2) add_numbers(args[0], args[1]);else printf("參數錯誤! 用法: add <a> <b>\n");} else if (strcmp(token, "sub") == 0) {if (arg_count == 2) subtract_numbers(args[0], args[1]);else printf("參數錯誤! 用法: sub <a> <b>\n");} else if (strcmp(token, "mul") == 0) {if (arg_count == 2) multiply_numbers(args[0], args[1]);else printf("參數錯誤! 用法: mul <a> <b>\n");} else if (strcmp(token, "div") == 0) {if (arg_count == 2) divide_numbers(args[0], args[1]);else printf("參數錯誤! 用法: div <a> <b>\n");} else if (strcmp(token, "fdiv") == 0) {if (arg_count == 2) float_divide_numbers(args[0], args[1]);else printf("參數錯誤! 用法: fdiv <a> <b>\n");} else if (strcmp(token, "pow") == 0) {if (arg_count == 2) power_numbers(args[0], args[1]);else printf("參數錯誤! 用法: pow <base> <exp>\n");} else if (strcmp(token, "pow2") == 0) {if (arg_count == 1) power_of_two(args[0]);else printf("參數錯誤! 用法: pow2 <exp>\n");} else if (strcmp(token, "gcd") == 0) {if (arg_count == 2) gcd_numbers(args[0], args[1]);else printf("參數錯誤! 用法: gcd <a> <b>\n");} else if (strcmp(token, "sqrt") == 0) {if (arg_count == 1) square_root(args[0]);else printf("參數錯誤! 用法: sqrt <num>\n");} else if (strcmp(token, "mod") == 0) {if (arg_count == 2) modulo_numbers(args[0], args[1]);else printf("參數錯誤! 用法: mod <a> <b>\n");} else if (strcmp(token, "fac") == 0) {if (arg_count == 1) factorial(args[0]);else printf("參數錯誤! 用法: fac <n>\n");} else if (strcmp(token, "bfac") == 0) {if (arg_count == 1) big_factorial(args[0]);else printf("參數錯誤! 用法: bfac <n>\n");} else {printf("未知命令: %s\n", token);printf("輸入 'help' 查看可用命令\n");}free(input);}// 保存歷史記錄write_history(history_file);clear_mp_vars();printf("程序已退出。\n");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93253.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

08--深入解析C++ list:高效操作與實現原理

1. list介紹1.1. list概述template < class T, class Alloc allocator<T> > class list;Lists are sequence containers that allow constant time insert and erase operations anywhere within the sequence, and iteration in both directions.概述&#xff1…

GraphQL從入門到精通完整指南

目錄 什么是GraphQLGraphQL核心概念GraphQL Schema定義語言查詢(Queries)變更(Mutations)訂閱(Subscriptions)Schema設計最佳實踐服務端實現客戶端使用高級特性性能優化實戰項目 什么是GraphQL GraphQL是由Facebook開發的一種API查詢語言和運行時。它為API提供了完整且易于理…

使用 Dockerfile 與 Docker Compose 結合+Docker-compose.yml 文件詳解

使用 Dockerfile 與 Docker Compose 結合的完整流程 Dockerfile 用于定義單個容器的構建過程&#xff0c;而 Docker Compose 則用于編排多個容器。以下是結合使用兩者的完整方法&#xff1a; 1. 創建 Dockerfile 在項目目錄中創建 Dockerfile 定義應用鏡像的構建過程&#xff1…

15 ABP Framework 開發工具

ABP Framework 開發工具 概述 該頁面詳細介紹了 ABP Framework 提供的開發工具和命令行界面&#xff08;CLI&#xff09;&#xff0c;用于創建、管理和定制 ABP 項目。ABP CLI 是主要開發工具&#xff0c;支持項目腳手架、模塊添加、數據庫遷移管理及常見開發任務自動化。 ABP …

力扣top100(day02-01)--鏈表01

160. 相交鏈表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {/*** 查找兩個鏈表的相交節點* param headA 第一個…

LLM 中 語音編碼與文本embeding的本質區別

直接使用語音編碼,是什么形式,和文本的區別 直接使用語音編碼的形式 語音編碼是將模擬語音信號轉換為數字信號的技術,其核心是對語音的聲學特征進行數字化表征,直接承載語音的物理聲學信息。其形式可分為以下幾類: 1. 基于波形的編碼(保留原始波形特征) 脈沖編碼調制…

模型選擇與調優

一、模型選擇與調優在機器學習中&#xff0c;模型的選擇和調優是一個重要的步驟&#xff0c;它直接影響到最終模型的性能1、交叉驗證在任何有監督機器學習項目的模型構建階段&#xff0c;我們訓練模型的目的是從標記的示例中學習所有權重和偏差的最佳值如果我們使用相同的標記示…

vue+Django農產品推薦與價格預測系統、雙推薦+機器學習預測+知識圖譜

vueflask農產品推薦與價格預測系統、雙推薦機器學習價格預測知識圖譜文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站&#xff0c;有好處&#xff01;編號: D010 技術架構: vueflaskmysqlneo4j 核心技術&#xff1a; 基…

數據分析小白訓練營:基于python編程語言的Numpy庫介紹(第三方庫)(下篇)

銜接上篇文章&#xff1a;數據分析小白訓練營&#xff1a;基于python編程語言的Numpy庫介紹&#xff08;第三方庫&#xff09;&#xff08;上篇&#xff09;&#xff08;十一&#xff09;數組的組合核心功能&#xff1a;一、生成基數組np.arange().reshape() 基礎運算功能&…

負載因子(Load Factor) :哈希表(Hash Table)中的一個關鍵性能指標

負載因子&#xff08;Load Factor&#xff09; 是哈希表&#xff08;Hash Table&#xff09;中的一個關鍵性能指標&#xff0c;用于衡量哈希表的空間利用率和發生哈希沖突的可能性。一&#xff1a;定義負載因子&#xff08;通常用希臘字母 λ 表示&#xff09;的計算公式為&…

監控插件SkyWalking(一)原理

一、介紹 1、簡介 SkyWalking 是一個 開源的 APM&#xff08;Application Performance Monitoring&#xff0c;應用性能監控&#xff09;和分布式追蹤系統&#xff0c;主要用于監控、追蹤、分析分布式系統中的調用鏈路、性能指標和日志。 它由 Apache 基金會托管&#xff0c;…

【接口自動化測試】---自動化框架pytest

目錄 1、用例運行規則 2、pytest命令參數 3、pytest配置文件 4、前后置 5、斷言 6、參數化---對函數的參數&#xff08;重要&#xff09; 7、fixture 7.1、基本用法 7.2、fixture嵌套&#xff1a; 7.3、請求多個fixture&#xff1a; 7.4、yield fixture 7.5、帶參數…

Flink Stream API 源碼走讀 - socketTextStream

概述 本文深入分析了 Flink 中 socketTextStream() 方法的源碼實現&#xff0c;從用戶API調用到最終返回 DataStream 的完整流程。 核心知識點 1. socketTextStream 方法重載鏈 // 用戶調用入口 env.socketTextStream("hostname", 9999)↓ 補充分隔符參數 env.socket…

待辦事項小程序開發

1. 項目規劃功能需求&#xff1a;添加待辦事項標記完成/未完成刪除待辦事項分類或標簽管理&#xff08;可選&#xff09;數據持久化&#xff08;本地存儲&#xff09;2. 實現功能添加待辦事項&#xff1a;監聽輸入框和按鈕事件&#xff0c;將輸入內容添加到列表。 標記完成/未完…

【C#】Region、Exclude的用法

在 C# 中&#xff0c;Region 和 Exclude 是與圖形編程相關的概念&#xff0c;通常在使用 System.Drawing 命名空間進行 GDI 繪圖時出現。它們主要用于定義和操作二維空間中的區域&#xff08;幾何區域&#xff09;&#xff0c;常用于窗體裁剪、控件重繪、圖形繪制優化等場景。 …

機器學習 - Kaggle項目實踐(3)Digit Recognizer 手寫數字識別

Digit Recognizer | Kaggle 題面 Digit Recognizer-CNN | Kaggle 下面代碼的kaggle版本 使用CNN進行手寫數字識別 學習到了網絡搭建手法學習率退火數據增廣 提高訓練效果。 使用混淆矩陣 以及對分類出錯概率最大的例子單獨拎出來分析。 最終以99.546%正確率 排在 86/1035 …

新手如何高效運營亞馬遜跨境電商:從傳統SP廣告到DeepBI智能策略

"為什么我的廣告點擊量很高但訂單轉化率卻很低&#xff1f;""如何避免新品期廣告預算被大詞消耗殆盡&#xff1f;""為什么手動調整關鍵詞和出價總是慢市場半拍&#xff1f;""競品ASIN投放到底該怎么做才有效&#xff1f;""有沒有…

【論文閱讀 | CVPR 2024 | UniRGB-IR:通過適配器調優實現可見光-紅外語義任務的統一框架】

論文閱讀 | CVPR 2024 | UniRGB-IR&#xff1a;通過適配器調優實現可見光-紅外語義任務的統一框架?1&&2. 摘要&&引言3.方法3.1 整體架構3.2 多模態特征池3.3 補充特征注入器3.4 適配器調優范式4 實驗4.1 RGB-IR 目標檢測4.2 RGB-IR 語義分割4.3 RGB-IR 顯著目…

Hyperf 百度翻譯接口實現方案

保留 HTML/XML 標簽結構&#xff0c;僅翻譯文本內容&#xff0c;避免破壞富文本格式。采用「HTML 解析 → 文本提取 → 批量翻譯 → 回填」的流程。百度翻譯集成方案&#xff1a;富文本內容翻譯系統 HTML 解析 百度翻譯 API 集成 文件結構 app/ ├── Controller/ │ └──…

字節跳動 VeOmni 框架開源:統一多模態訓練效率飛躍!

資料來源&#xff1a;火山引擎-開發者社區 多模態時代的訓練痛點&#xff0c;終于有了“特效藥” 當大模型從單一語言向文本 圖像 視頻的多模態進化時&#xff0c;算法工程師們的訓練流程卻陷入了 “碎片化困境”&#xff1a; 當業務要同時迭代 DiT、LLM 與 VLM時&#xff0…